《Unix环境高级编程》 总结 (四)

来源:互联网 发布:学汉语翻译软件 编辑:程序博客网 时间:2024/06/05 07:04
系统数据文件和信息 (第六章)

1、口令文件
目录:/etc/passwd,如下:


用户名:密码:UID:GID:注释字段:初始工作目录:初始shell
shell为空,则采用默认shell,常为/bin/sh
用户squid的shell为/dev/null,表示不让任务人以squid的名义登录系统;也可设置shell为/bin/false或者/bin/true
nobody表示人人都也登录系统,但其UID和GID没任务特权,只能读写人人都也读写的文件
管理员可通过vipw来编辑口令文件(串行化修改,保证与其它文件一致)

根据用户名或者UID查找用户其它信息

查找整个口令文件信息
如下:
#include
#include
#include
struct passwd *
getpwnam(const char *name)
{
struct passwd *ptr;
setpwent(); // 确保定位到文件开始处
while ((ptr = getpwent()) != NULL) // 得到下一个
if (strcmp(name, ptr->pw_name) == 0)
break; /* found a match */
endpwent(); // 结束
return(ptr); /* ptr is NULL if no match found */
}
2、阴影文件
存放用户加密后的密码,/etc/shadow

存取阴影文件相关函数:

3、组文件
目录:/etc/group

相关函数:
根据名称或者GID查询:

查询全部:

4、附属组文件
一个用户可属于多个组,可多至16个,相关函数:

getgroups:得到进程所属用户的附属组,最多得到gidsetsize个,组ID存放在grouplist中,返回组ID数量
5、其它数据文件

6、登录账户记录
utmp (/var/run/utmp):当前登录到系统的用户
wtmp(/var/log/wtmp):记录各登录、注销事件
7、系统标识
返回主机和操作系统相关的信息,如下:


可用命令uname打印相关信息。
得到主机名,如下:

其中namelen的最大值为HOST_NAME_MAX,对应hostname命令。
8、时间和日期
采用UTC时间(1970-1-1 00:00:00),返回当前时间和日期:

如果calptr非空,则时间值也保存在calptr中。
返回不同系统时间,如下:

时间类型ID如下:

当clock_id为CLOCK_REALTIME时,同time,但其精度更高。
要指定精度,如下:

如果要求精度为1毫秒,则tsp中tv_sec = 0,tv_nsec = 1000000。
要设置特定时钟,如下:

需要权限,有的时针不能设置。
也可用gettimeofday,但该函数已弃用,其中tzp一般为NULL


其中虚线与时区有关。

将日历时间转换为分解时间,如下:

localtime返回本地时间(与本地时区和夏令时相关)

tm_sec可以表示闰秒;tm_mday从1开始;如果为夏令时,则tm_isdst大于0,不为夏令时,则tm_isdst等于0,此信息不可用,则tm_isdst小于0
从分解时间到日历时间,如下:

分解时间格式化,如下:

其中strftime_l可以指定时区。tmptr为要格式化的分解时间,format同printf,支持的格式如下:



从字符串中得到分解时间,如下:







原创粉丝点击