系统数据文件和信息
passwd结构体(#include<pwd.h>)
这个结构体的字段也就是/ect/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
/etc/passwd中一行记录对应一个用户,分为7个字段:
用户名:加密口令:用户标ID:组ID:注释字段:初始工作目录:初始Shell
函数:getpwuid getpwnam返回passwd结构体的指针
setpwent()用来将getpwent()的读写地址指回密码文件开头。
实验:自己实现getpwnam,读取/etc/passwd文件
结果:
name:samba
pw_dir:/home/samba
pw_shell:/bin/bash
1 #include <stdio.h>
2 #include "apue.h"
3 #include <pwd.h>
4
5 struct passwd *mygetpwnam(char *name)
6 {
7 struct passwd *ptr;
8 setpwent();
9 while((ptr = getpwent())!=NULL)
10 {
11 if(strcmp(name,ptr->pw_name)==0)
12 break;
13 }
14 endpwent();
15 return ptr;
16 }
17
18
19 int main()
20 {
21 struct passwd *ptr;
22 char name[]="samba";
23 ptr = mygetpwnam(name);
24 printf("name:%s\n",ptr->pw_name);
25 printf("pw_dir:%s\n",ptr->pw_dir);
26 printf("pw_shell:%s\n",ptr->pw_shell);
27 exit(0);
28 }
附属组ID,一个用户可以同时属于多个组。
系统标识
int uname(struct utsname*name)
gethostname(char *name,int namelen)
struct utsname
{ char sysname[_UTSNAME_SYSNAME_LENGTH];//当前操作系统名
char nodename[_UTSNAME_NODENAME_LENGTH];//网络上的名称
char release[_UTSNAME_RELEASE_LENGTH];//当前发布级别
char version[_UTSNAME_VERSION_LENGTH];//当前发布版本
char machine[_UTSNAME_MACHINE_LENGTH];//当前硬件体系类型
};
时间和日期
全局变量jiffies用来记录自系统启动以来产生的节拍的总数
开启动时,内核将该变量初始化为0,此后,每次时钟中断处理程序都会增加该变量的值。
time:返回1970年那个时间到现在的秒数,根据jiffies计算。
ctime把秒数转换成固定格式
gmtime和localtime把time的时间变成tm结构体
gmtime国际时间
localtime本地时间
mktime把tm结构体转换成time_t
asctime把tm转换成固定格式字符串
strftime把tm转换成可变格式字符串