整个第六章有点乏味啊,不是那么好玩,我还是想快点到后面的章节,很好玩。
apue6.1:
使用在6.3节中介绍的getspnam函数返回的spwd结构体中的sp_pwdp字段来访问加密字段,这个字段是在/etc/shadow文件中存储的,这个函数就是访问这个文件的系统接口。现在的linux操作系统在/etc/passwd中的加密口令字段都选择了使用占位符,而不真正的将加密字段给每个用户都能查看。
apue6.2:
这个我觉得最简单的方法就是直接查看/etc/shadow文件中的字段就可以查看加密口令对应的字段。这个东西我写个代码来验证一下吧,要不然这章实在太无聊。
——————————————————————————————分割线2016.7.11
线上个代码吧
#include
#include "apue.h"
#include
#include
int main () {
struct spwd *ptr;
while ((ptr = getspent ()) != NULL)
if (strcmp (ptr->sp_namp , "zjf") == 0)
break;
printf ("%s\n" , ptr->sp_pwdp);
}
这个代码比较少,但是验证了,书上6.3节中说的函数就是/etc/shadow文件的接口,所取出来的结构体代表的内容就是文件中的内容,程序执行的结果就是文件中加密密码的结果。我在这里使用的root权限运行的,但是如果使用普通用户执行的话,是看不到这个结果的。
————————————————————————————————分割线2016.7.13
apue6.3:
这道题目送分题啊,很简单的按照书上给出的函数借口调用就可以了。
#include
#include "apue.h"
#include
int main () {
struct utsname name;
if (uname (&name) < 0)
err_sys ("uname failed");
printf ("sysname is %s\n" , name.sysname);
printf ("nodename is %s\n" , name.nodename);
printf ("release is %s\n" , name.release);
printf ("version is %s\n" , name.version);
printf ("machine is %s\n" , name.machine);
}
系统自带了一个uname命令,我们也可以用这个命令来使用这些借口,最后的结果是两者之间并没有太多的区别,但是uname函数的选项要多了几个,但是输出的内容任然是一个集合。
apue6.4:
有哪个大神能提醒一下,这个题目是什么意思啊。
apue6.5:
#include
#include
#include
int main () {
time_t t;
struct tm *tmp;
char buf[64];
time (&t);
tmp = localtime (&t);
if (strftime (buf , 64 , "%Y %m %d %A %T %Z" , tmp) == 0)
printf ("the buf length 64 is too small\n");
else
printf ("%s\n" , buf);
}
这个例子和书上给出的例子没有太大的不同,只不过在输出的格式上我选在了和我所在的系统相似的格式,还有就是改变环境变量TZ之后所能得到的结果会有所不同。我做了这个实验,下面上图
从这里可以看出我的程序和date程序的格式基本是相同的,当我们将TZ时区改成欧洲的莫斯科的时候我们程序的输出发生了改变,看来系统函数在设计上还是极为严谨的。
——————————————————————————————————分割线2016.7.15
到此为止,第六章的更新就完成了,当然第四题希望有大牛指点。