Linux基本概念

匿名 (未验证) 提交于 2019-12-02 21:56:30

Ŀ¼

- 进程调度     - 内存管理     - 提供文件系统     - 创建和终止进程     - 设备访问     - 联网     - 提供系统调用应用编程接口(API)

   /*   由:分隔,分别对应结构中对应的字段    *    root:x:0:0:root:/root:/usr/bin/zsh    */    struct passwd {        char *pw_name;       //Login name        char *pw_passwd; //Encrypted password        uid_t pw_uid;        //User Id        gid_t pw_gid;        //Group Id        char *pw_gecos;      //@Deprecated        char *pw_dir;        //Initial working directory        char *pw_shell;      //Login shell    };
   #include <pwd.h>    struct passwd *getpwnam(const char *name);    struct passwd *getpwid(uid_t uid);        /* 扫描/etc/passwd文件  */    struct passwd *getpwent(void);    void setpwent(void); //设置指针到开头    void endpwent(void); //扫描完成关闭文件

   /*   由:分隔,分别对应结构中对应的字段    *    adm:x:4:syslog    */    struct group {        char *gr_name;       //Group name        char *gr_passwd; //Encrypted password        gid_t gr_gid;        //Group Id        char **gr_men;       //Members list    };
   #include <grp.h>    struct group *getgrnam(const char *name);    struct group *getgrgid(gid_t gid);        /* 扫描/etc/group文件  */    struct group *getgrent(void);    void setgrent(void); //设置指针到开头    void endgrent(void); //扫描完成关闭文件

   /*   由:分隔,分别对应结构中对应的字段    *    root:*:17737:0:99999:7:::    */    struct spwd {        char *sp_name;       //Login name        char *sp_pwdp;       //Encrypted password            ...    };
   #include <shadow.h>    struct spwd *getspnam(const char *name);        /* 扫描/etc/shadow文件  */    struct group *getspent(void);    void setspent(void); //设置指针到开头    void endspent(void); //扫描完成关闭文件

   #define _XOPEN_SOURCE    #include <unistd.h>        char *crypt(const char *key, const char *salt);

   ...    struct *wpd = getpwnam(username);    struct *spwd  = getspnam(username);    if (spwd != NULL)        wpd->pw_passwd = spwd->sp_pwdp;    char *password = getpass("Password:");    char *encrypted = crypt(password, pwd->pw_passwd);    ...      //clear password and validity check    Boolean authOk = strcmp(encrypted, pwd->pw_passwd) == 0;    if (authOk)        //success

   struct stat {        dev_t    st_dev;        ino_t    st_ino;        mode_t   st_mode;    //File type and permissions        nlink_t  st_nlinke;        uid_t    st_uid;     //User ID of file owner        gid_t    st_gid;     //Group ID of file owner        dev_t    st_rdev;        off_t    st_size;    //Total file size (bytes)        ...    };

  • 打开一个文件:open()
   #include <sys/stat.h>    #include <fcntl.h>    int open(const char *pathname, int flags, .../* mode_t mode */);

标志 用途
O_RDONLY 以只读方式打开
O_WRONLY 以只写方式打开
O_RDWR 以读写方式打开
O_CREAT 若文件不存在则创建之
O_DIRECTORY 若pathname不是目录,则失败
O_EXCL 与O_CREAT一起,如果文件已存在就不打开文件,返回错误EEXIST
O_LARGEFILE 在32位系统中使用此标志打开大文件
O_APPEND 总在文件尾部追加数据
O_TRUNC 如果文件已经存在且为普通文件,那么清空文件内容,长度置为0
... ...
  • 创建一个文件:creat()

    #include <fcntl.h> int creat(const char *pathname, mode_t mode);
  • 数据写入文件:write()

    #include <unistd.h> ssize_t write(int fd, void *buffer, size_t count);
  • 关闭文件:write()

    #include <unistd.h> int close(int fd);
  • 改变文件偏移量

    #include <unistd.h> off_t lseek(int fd, off_t offset, int whence);

标志 用途
SEEK_SET 从文件头部起始点开始偏移
SEEK_CUR 从当前文件偏移量开始偏移
SEEK_END 从文件尾部开始偏移
  • I/O控制方法:ioctl()

    #include <sys/ioctl.h> int ioctl(int fd, int request, .../* argp */);

- 文本:程序的指令          - 数据:程序使用的静态变量          - 堆:程序可从该区域动态分配额外内存          - 栈:随函数调用、返回而增减的一片内存,用于局部变量和函数调用链接信息分配存储空间

#include <sys/ioctl.h> pid_t getpid(void); pid_t getppid(void);

文件 描述
cmdline 以\0分隔的命令行参数
cwd 指向当前工作目录的符号链接
Environ 环境信息,以\0分隔
exe 指向正在执行文件的符号链接
fd 指向由进程打开的文件的符号链接
maps 内存映射
men 进程虚拟内存
root 指向根目录的符号链接
status 进程状态信息(进程ID、凭证、内存使用量、信号等)
task 为进程中的每个线程均包含一个子目录
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!