(十一)系统数据文件和信息
1.include<pwd.h> struct passwd *getpwuid(uid_t uid);
struct passwd *getpwnam(const char *name);//获取口令文件返回passwd结构,出错返NULL
struct passwd {
char *pw_name; //用户名
char *pw_passwd; //加密口令
uid_t blog_uid; //数值用户ID
gid_t blog_gid; //数值组ID
char *pw_gecos; //注释字段
char *pw_dir; //出始工作目录
char *pw_shell;//初始shell(用户程序)
};
2.struct passwd *getpwent(void);//返回口令文件(/etc/passwd)中的下一项记录,调用用一定要使用endpwent()来关闭; 出错或者到达文件结尾则返回NULL
void setpwent(void);//打开文件(未打开时)然后反绕它所使用的文件(定位到开始处)
void endpwent(void);//关闭使用的文件
3.#include <shadow.h> /etc/shadow
struct spwd *getspnam(const char *name);//获取阴影口令文件返回spwd结构
struct spwd *getspent(void);//获取阴影口令文件中的下一项并返回spwd结构;出错返回NULL
void setspent(void); //打开文件(未打开时)然后反绕文件
void endspent(void);//关闭文件
struct spwd {
char *sp_namp; //用户登录名
char *sp_pwdp;//加密口令
int sp_lstchg; //上次更改口令以来经过的时间
int sp_max; //经过多少天后允许被修改
int sp_warn; //到期警告天数
int sp_inact; //帐户不活动之前剩余天数
int sp_expire; //帐户到期天数
unsigned int sp_flag;//保留字
}
4.#include <grp.h> struct group *getgrgid(gid_t gid);//根据组ID返回相应的group结构
struct gourp *getgrnam(const char *name);根据组名获取组结构
//成功返回相对应的组结构,出错返回NULL
struct group {
char *gr_name;//组名
char *gr_passwd;//加密口令
int gr_gid;//组ID
char **gr_mem;//指向各用户名的指针的数组
};
5.struct group *getgrent(void);//返回/etc/group文件中的下一项并返回指针返回NULL
void setgrent(void);// 打开文件(未打开时)然后反绕文件
void endgrent(void);//关闭文件
6.int uname(struct utsname *name);
//返回与当前主机和操作系统有关的信息,成功返回非负,出错返回-1
struct utsname {
char sysname[]; //操作系统名
char nodename[]; //节点名
char release[]; //当前操作系统的版本
char version[]; //这个版本的序号
char machine[]; //主机名
}
7.int gethostname(char *name, int namlen);//获取主机名给name,成功返回0失败返回-1
8.#include<time.h> time_t time(time_t *calptr);//返回当前的时间和日期并存于calptr,出错-1
9.#include<sys/time.h>int gettimeofday(struct timeval *restrict tp, void *restrict tzp);
//获取精确到微秒的时间并存于tp中,返回值:总是0, tzp的唯一合法值是NULL
struct tmeval {
time_t tv_sec; //秒
long tv_usec ;//微秒
}
10. struct tm *gmtime(const time_t *calptr);//将日历时间转成国际标准时间的年月日时分秒周日
struct tm *localtime(const time_t *calptr);// 将日历时间转换成本地时间(考虑到本地时间和夏时指标志)返回指向tm结构的指针
struct tm {
int tm_sec; //秒数 [0-60] 60可以表示润秒
int tm_min; //分钟 [0-59]
int tm_hour; //小时 [0-23]
int tm_mday; //日 [1-31]
int tm_mon; //月 [0-11]
int tm_year;//年 [1900-]
int tm_wday; //星期 [0-6]
int tm_yady;//一年的第几天 [0-365]
int tm_sidst; //是否为夏时制
};
11.time_t mktime(struct tm *tmptr);//以本地时间的信息转化成time_t的值,返回:日历时间/-1
12.char *asctime(const struct tm *tmptr);
char *ctime(const time_t *calptr);
//将各自的时间参数转化成如”Tue Feb 10 18:20:15 2007/n/0”的格式
13.size_t strftime(char *restrict buf, size_t maxsize, const char *restrict format, const struct tm *restrict tmptr);//将时间tmptr以指定的format格式存于buf中,返回存入的字符数/失败0
format中可以用以下符号表示要输出的格式:
%a 缩写的周日名 Tue %A 全周日名 Tuesday
%b 缩写的月名 Feb %B 全月名 February
%c 日期和时间 Tue Feb 10 13:02:15 2007 %C 年/100 [0-99] 7
%d 月日[0-31] 10 %D 日期[MM/DD/YY] 07/02/10
%e 月日[1-31](一位数字加空格) 2 %F [YYYY-MM-DD] 2007-02-10
%g 基于周的年的最后两位数 07 %G 基于周的年 2007
%h 与%b相同 %H 小时(24小时制):[00-23]
%I 小时(12小时制)[01-12] %j 年日[001-366]
%m 月[01-12] %M 分[00-59]
%n 换行符 %p AM/PM PM
%r 本地时间(12小时) 06:27:38 PM %R 与%H:%M相同 18:27
%S 秒[00-60] %t 水平制表符
%T 与“%H:%M:%S” 18:27:38 %u 周日[1-7]
%U 星期日周数[00-53] %V 周数[01-53]
%w 周日[0-6] %W 星期一周数
%x 日期 %X 时间
%y 年的最后两位数 07 %Y 年 2007
%z UTC偏移量 -0500 %Z 时区名 EST
%% 转换一个% %