Unix环境高级编程-文件和目录(2)

1.用stat函数替换lstat函数,如果命令行参数之一是符号链接,会发生什么变化?

lstat和stat函数的区别是当命名的文件是一个符号链接时,lstat返回该符号链接的有关信息,而不是由该符号链接引用的文件的信息,也就是说lstat不跟随符号链接,而stat函数跟随符号链接,所以该程序不会显示文件类型是“符号链接”,比如书中程序中,/dev/cdrom是/dev/sr0的一个符号链接,但是stat函数的结果只显示/dev/cdrom是一个块特殊文件,而不报告说是一个文件链接,如果符号链接指向一个根本不存在的文件,stat会出错返回。

2.如果文件模式创建屏蔽字是777,结果会如何?

会关闭该文件的所有访问权限


命令:umask 777


3.4.12节讲到一个普通文件的大小可以为0,同时又知道st_size字段对普通文件、目录文件和符号链接 有意义,那么目录和符号链接长度能否为0?

目录的长度从来都不会是0,因为总是包含.和..两项,符号链接的长度指的是路径名的字符数,也不可能为0。


4.在4.12节ls命令的输出时 ,core和core.copy的访问权限不同,为什么?

当创建一个新的 core文件时,内核对访问权限有一个默认设置,这一默认值可能会也可能不会被umask修改,shell对创建的重定向的新文件也有一个默认的访问权限,本例中是rw-rw-rw-,这个值总是被当前的umask值修改,本例中umask值为02.


5.3.16节描述了/dev/fd的特征,如果每个用户都可以访问这些文件 ,则其访问权限必须为rw-rw-rw-。有些程序创建输出文件时,先删除该文件以确保该文件名不存在

unlink(path);

if((fd = creat(path , FILE_MODE))<0)

err_sys(...);

如果path是/dev/fd/1,结果如何?

dev目录关闭了一般用户的写访问权限,以防止普通用户删除目录中的文件名,这就意味着unlink失败。


posted on 2016-08-22 17:39  sichenzhao  阅读(121)  评论(0编辑  收藏  举报

导航