读书笔记-APUE第三版-(6)系统数据文件和信息

常见系统数据文件

下表列出了常见的系统数据文件及其查找函数。

以/etc/passwd文件为例,读取数据的程序基本框架如下:

void get_pw_entry()
{
    struct passwd *ptr;
    setpwent();
    while ((ptr = getpwent()) != 0) {
        ……
    }
    endpwent();
    return ptr;
}
  1. 每个数据文件都提供了一个get方法返回文件下一个记录项。
  2. set方法充值当前位置到文件开始处。
  3. end方法关闭数据文件。
  4. 表格中的getpwnamgetpwuid为查找方法,根据名称或ID查找相应记录项。

passwd文件详解

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

如上所示:

  1. 每一列含义依次为:username:password:User ID:Group ID:comment:home directory:shell
  2. 第二列密码被加密,存储在/etc/shadow中。
  3. 最后一列登陆Shell代表登陆用户登陆后执行的命令,一般用户都是启动shell进程,一些特殊账号使用nologin可以阻止该账号正常登陆。
  4. 第四列是用户登陆后所属组ID。用户可以属于多个组,用户登陆后,login程序会调用initgroups函数,读取/etc/group文件,替用户初始化附加组ID。
  5. 使用finger命令打印用户信息,管理员使用vipw命令编辑passwd文件(比直接编辑文件更安全)。

时间和日期函数

如图所示:

  1. time_t以秒为单位,为UTC时间(注意time函数不要和times函数混淆)。
  2. timeval结构存储了毫秒级别的日历时间。
  3. 如果系统支持,timespec结构中tv_nsec字段精度为纳秒。
  4. tm结构中包含秒、分、小时、日期等字段,可以是格林尼治时间(gmtime函数),也可以是本地时间(localtime函数)。
  5. strXXXX系列方法用于格式化时间字符串

其他重要数据文件和函数

  1. 登录账户:utmp文件存储当前登录所有用户(who命令访问),wtmp记录用户登录和退出(last命令访问)
  2. 系统标识:utsname结构(uname命令访问)中包含内核名、主机名(gethostname命令访问)、发行版本和体系结构等

读书笔记-APUE第三版-(6)系统数据文件和信息

时间: 2024-12-23 07:00:39

读书笔记-APUE第三版-(6)系统数据文件和信息的相关文章

读书笔记-APUE第三版-(7)进程环境

本章关注单进程运行环境:启动&终止.参数传递和内存布局等. 进程启动终止 如图所示: 启动:内核通过exec函数执行程序,在main函数运行之前,会调用启动例程(start-up routine),取得命令行参数和环境变量.可以把启动例程理解为exit(main(argc,argv)). 终止:五种正常终止方式(从main方法返回/exit/_exit/最后一个线程返回/最后一个线程退出):三种异常终止方式(abort/接收到信号/最后一个线程接收到取消请求). exit与_exit关系:exi

读书笔记-APUE第三版-(5)标准IO库

ISO C标准I/O库使用流的概念读写文件.流是对数据传输的抽象,可以把流理解为从起点到终点间的字节序列. 标准I/O库通过维护进程空间内的缓冲区,减少read/write系统调用次数来提高I/O效率.之前介绍的Unbuffered I/O和文件描述符fd打交道,标准I/O则使用FILE指针. typedef struct{ short level;/*缓冲区满程度*/ unsigned flags;/*文件打开状态标志*/ char fd;/*文件描述符*/ unsigned char hol

读书笔记-APUE第三版-(8)进程控制

进程ID 每一个进程都有一个唯一的进程ID.几个特殊进程: 0号进程是内核进程,一般是调度进程swapper. 1号进程init,是用户进程(以root权限执行/sbin/init),负责初始化. 几个重要函数:getpid(进程ID)/getppid(父进程ID)/getuid(进程真有用户ID)/geteuid(进程有效用户ID)/getgid(进程真有用户组ID)/getegid(进程有效用户组ID). fork/exec/wait例程 fork家族函数用于创建子进程(父子进程关系下节详细

读书笔记-APUE第三版-(9)进程关系

登录过程 终端登录 init从/etc/ttys中读取终端信息,对每个允许登录的终端,都fork子进程,并执行getty.getty打开终端设备,执行login: execle("/bin/login,"login", "-p", username, (char *)0, envp) login进行用户名密码验证,同时还会进行切换到用户主目录/修改终端设备属主&读写权限/创建进程组/setuid等动作,然后运行login shell. execl(

APUE学习笔记:第六章 系统数据文件和信息

6.1 引言 UNIX系统的正常运行需要使用大量与系统有关的数据文件,针对这些数据文件的可移植接口是本章的主题.本章还介绍了系统标识函数.时间和日期函数 6.2 口令文件 UNIX系统的口令文件包含了下列各字段,这些字段包含在<pwd.h>中定义的passwd结构中 用户名 char *pw_name 加密口令 char *pw_passwd 数值用户ID uid_t pw_uid 数值组ID gid_t pw_gid 注释字段 char *pw_gecos 初始工作目录 char *pw_d

Unix环境高级编程学习笔记(三):标准I/O , 系统数据文件和信息

1 标准I/O函数不同于read,write函数,是其在流上进行操作, 当首次调用标准I/O函数时,系统会首先调用malloc,为流创造缓冲区, 2 fopen函数 #include<stdio.h> file * fopen(const char* pathname, const char * restrict name); 打开返回指针,出错返回NULL, type的取指有r(读),w(写),a(追加),r+/w+(读+写),a+(读+写+追加) int fclose(file* fp)

(四) 一起学 APUE 之 系统数据文件和信息

. . . . . 目录 (一) 一起学 APUE 之 标准 IO (二) 一起学 APUE 之 文件 IO (三) 一起学 APUE 之 文件和目录 (四) 一起学 APUE 之 系统数据文件和信息 1.getpwnam(3).getpwuid(3) 1 getpwnam, getpwuid - get password file entry 2 3 #include <sys/types.h> 4 #include <pwd.h> 5 6 struct passwd *getp

《UNIX环境高级编程》--6系统数据文件和信息

系统数据文件和信息 用户配置文件 1. /etc/passwd UNIX口令文件 /etc/passwd/是一个ASCII文件,每一行包含很多字段,字段之间用冒号分隔.这些字段包含在<pwd.h>头文件定义的passwd,该结构有如下成员: char *pw_name:用户名 char *pw_passwd:加密口令 uid_t pw_uid:数值用户ID gid_t pw_gid:数值组ID char *pw_gecos:注释字段 char *pw_dir:初始工作目录 char *pw_s

APUE学习笔记(第六章 系统数据文件和信息)

UNIX系统的正常运作需要使用大量与系统有关的数据文件,例如,口令文件/etc/passwd和组文件/etc/group就是经常被多个程序频繁使用的两个文件. 口令文件 UNIX系统口令文件包含如下字段,这些字段包含在<pwd.h>中定义的passwd结构中 口令文件是/etc/passwd,每一行包含上面各字段,字段之间用冒号分隔.可以使用finger命令打印指定用户的有关信息:finger -p 用户名 POSIX.1定义了两个获取口令文件项的函数,在给定用户登录名或数值用户ID后,这两个