[UNIX环境高级编程第二版]读书笔记6章

6.1  由于历史原因,大量系统有关的数据文件都是ASCII文本文件。

6.2  口令文件中shell如果为/dev/null表示阻止任何人以该用户名义登陆。
     finger -p username可以显示用户相关信息。
     有些系统提供了vipw命令,允许管理员编辑口令文件。
     获取口令文件项的函数。
     struct passwd *getpwuid(uid_t uid);
     struct passwd *getpwnam(const char *name);
     查看整个口令文件
     struct passwd *getpwent(void);
     void setpwent(void); void endpwent(void);

     在程序开始处调用setpwent是自我保护性措施,以便调用者在此之前已经调用getpwent打开有关文件的情况下,反绕有关文件使他们定位到文件开始处。使用完之后应该调用endpwent关闭文件。

6.3  加密口令是单向算法处理过的用户口令副本。为使有所企图的人难以获得加密口令,系统将加密口令存放在阴影口令中(shadow password)的文件中。/etc/shadow文件
     下列函数可以访问阴影口令文件。
      struct spwd *getspnam(const char *name);
      struct spwd *getspent(void);
      void setspent(void);

      void endspent(void);

6.4  查看组名或组ID。
     struct group *getgrgid(gid_t gid);
     struct group *getgrnam(const char *name);
     搜索整个组文件。
     struct *getgrent(void);
     void setgrent(void);

     void endgrent(void);

6.5  早期用户的组经常改动,后引入附加组,可以有多个。
     获取和设置附加组。
     int getgroups(int gidsetsize, gid_t grouplist[]);返回组。
     int setgroups(int ngroups, const gid_t grouplist[]);由超级用户调用为进程设置附加组ID表。

     int initgroups(const char *username, gid_t basegid);读取整个组文件,然后对username确定其组的成员关系,并调用setgroups为该用户初始化附加组ID表。

6.6  查看不同系统的实现的区别
     
6.7  /etc/services记录各网络服务器所提供的服务的数据文件。
     /etc/protocols记录协议信息的数据文件。
     /etc/networks记录网络信息的数据文件。
     对于每个数据文件,一般都有至少三个函数。
     1)get函数:读下一个记录,如果需要,还可以打开该文件。通常返回结构的指针。大多数get返回指向静态结构的指针,要保存内容,需复制它。
     2)set函数:打开数据文件,然后反绕该文件。如果希望在文件起始处开始处理,使用此函数。
     3)end函数:关闭相应数据文件。
     
6.8  登陆账户记录
     大多数UNIX提供下列数据文件:
     utmp文件:记录当前登陆进系统的各个用户;/var/run/utmp

     wtmp文件:跟踪各个登录和注销事件;/var/log/wtmp

6.9  获取当前主机和操作系统有关信息。
     int uname(struct utsname *name);操作系统名字,节点名字,当前release,当前版本,硬件类型。

     int gethostname(char *name, int namelen);只返回主机名,通常是TCP/IP网络上的主机的名字。对应hostname命令。

6.10 UNIX内核提供的时间是自UTC公元1970年1月1日00:00:00以来的秒数。

     time_t time(time_t *calptr);返回当前时间和日期。
     int gettimeofday(struct timeval *restrict tp, void *restrict tzp);提供最高位微妙级的时间分辨率。
     
     struct tm *gmtime(const time_t *calptr);将日历时间转换成国际标准时间。
     struct tm *localtime(const time_t *calptr); 将日历时间转换为本地时间。
     time_t mktime(struct tm *tmptr);以本地时间年月日做参数,将其转换成time_t值。
     char *asctime(const struct tm *tmptr);
     char *ctime(const time_t *calptr);产生大家熟悉的26字节的字符串,与date命令输出类型。
     最后一个函数,格式化输出时间。
     size_t strftime(char *restrict buf, size_t maxsize, const char *restrict format, const struct tm *restrict tmptr);

     

      

6.11 null
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值