capter 5 standard IO
1. 为了了解你所使用的系统中标准I / O库的实现,最好从头文件< s t d i o . h >开始。从中可以看到:F I L E对象是如何定义的,每个流标志的定义,定义为宏的各个标准I / O例程(例如g e t c)
2. 该系统的默认是:当标准输入、输出连至终端时,它们是行缓存的。行缓存的长度是1 2 8字节。注意,这并没有将输入、输出的行长限制1 2 8字节,这只是缓存的长度。如果要将5 1 2字节的行写到标准输出则要进行四次w r i t e系统调用。当将这两个流重新定向到普通文件时,它们就变成是全缓存的;
3. 程序中用到的临时问题一般的处理方法是:先打开临时文件,然后ulink,这样在程序退出的时候会自动删除打开的文件;
4. 关于临时文件,及临时文件前缀问题详细查看apue capter 5 last section
capter 6 system data files and informations
1. 从/etc/passwd中得到用户的基本信息
getpwnam getpwuid直接得到用户信息struct passwd<pwd.h>
struct passwd {
char *pw_name; /* username */
char *pw_passwd; /* user password */
uid_t pw_uid; /* user ID */
gid_t pw_gid; /* group ID */
char *pw_gecos; /* real name */
char *pw_dir; /* home directory */
char *pw_shell; /* shell program */
};
另外方法取得所有用户的信息
setpwent();
struct passwd * = getpwent();
endpwent();
2. 取用户组数据和取用户名相似
struct group {
char *gr_name; /* group name */
char *gr_passwd; /* group password */
gid_t gr_gid; /* group ID */
char **gr_mem; /* group members */
};
3. 使用添加组I D的优点是不必再显式地经常更改组。一个用户常常会参加多个项目,因此也就要同时属于多个组;
我们不仅可以属于口令记录中组I D所对应的组,也可属于多至1 6个另外的组。文件存取许可权检查相应被修改为:
不仅将进程的有效组I D与文件的组I D进行比较。
4. /var/run/utmp 当前系统登录对象 /var/log/wtmp 用户登录登出 (login logout)记录
5. 各种时间:
1》time_t time()直接得到格国际标准时间;
struct tm {
int tm_sec; /* seconds */
int tm_min; /* minutes */
int tm_hour; /* hours */
int tm_mday; /* day of the month */
int tm_mon; /* month */
int tm_year; /* year */
int tm_wday; /* day of the week */
int tm_yday; /* day in the year */
int tm_isdst; /* daylight saving time */
};
2》localtime得到如上数据结构的时间: 秒可以[0-61]闰秒; 除了月日字段,其他字段的值都以0开始
3》localtime和gmtime之间的区别是:localtime将日历时间变换成本地时间(考虑到本地时区和夏时制标志),
而gmtime则将日历时间变换成国际标准时间的年、月、日、时、分、秒、周日
4》ctime直接从time_t得到可以显示的asc字符串