。用统计函数替换图4 - 3程序中的lstat函数,如若命令行参数之一是符号链接,会发生什么变化?
改之前:
root@clstore3 ~ #。//etc/passwd lstat/etc/dev/log/dev/tty/dev/sr0/dev/cdrom
/etc/passwd:定期
/etc:目录
/dev/日志:套接字
/dev/tty:性格特别
/dev/sr0:块特殊
可以看的出,lstat把/dev/cdrom当着软链接去看。
现在我们把程序lstat改为统计之后,允许结果如下,可以看统计查看的是符号链接所引用的文件的信息,
结论:lstat函数类似于统计,但当命名的文件是一个符号链接时,lstat返回该符号链接的有关信息,而不是有该符号链接引用的文件的信息只
root@clstore3 ~ #。/统计/etc/passwd/etc/dev/log/dev/tty/dev/sr0/dev/cdrom
/etc/passwd:定期
/etc:目录
/dev/日志:套接字
/dev/tty:性格特别
/dev/sr0:块特殊
#包括“apue。int h”
主要(int命令行参数个数,char * argv [])
{
,int我;
,struct stat buf;
,char * ptr;
(i=1;我& lt;命令行参数个数;我+ +){
,printf (" % s:“argv[我]);
,如果(stat (argv[我],和buf) & lt;0){,/*这需要改变lstat此药*/,
,,err_ret (“lstat错误”);
,,继续;
}
,如果(S_ISREG (buf.st_mode))
,,,ptr="常规";
, else if (S_ISDIR (buf.st_mode))
,,,ptr=澳柯肌?
, else if (S_ISCHR (buf.st_mode))
,,,ptr="字符特殊”;
, else if (S_ISBLK (buf.st_mode))
,,,ptr="块特殊”;
, else if (S_ISFIFO (buf.st_mode))
,,,ptr=癴ifo特别”;
, else if (S_ISLNK (buf.st_mode))
,,,ptr="符号链接",
, else if (S_ISSOCK (buf.st_mode))
,,,ptr="套接字",
,
其他,,,ptr=? *模式不明* *”,
, printf (" % s \ n ", ptr);
}
,退出(0);}
。
如果文件模式创建屏蔽字是777(八进制),结果会怎样?用壳的umask命令验证该结果只
[root@clstore3 ~] 0022 # umask
改为777后
[root@clstore3 ~] # umask 777
[root@clstore3 ~] 0777 # umask
创建一个test3文件子后,只有根可以看,也不可以更改了只
root@clstore3 ~ # vim test3。txt
[root@clstore3 ~] # ls过程test3.txt
- - - - - - - - - - -。1根根12 11月13 test3 10点。txt
。关闭一个你所有拥有的用户的读权限,将导致拒绝你访问你自己的文件,对此进行验证。
[root@clstore3 ~] # chmod 640/home/zhangb/Makefile
[root@clstore3 ~] # ls过程/home/zhangb/Makefile
-rw-r - - - - - -。1根根18709年5月22日17:32/home/zhangb/Makefile
切换到用户zhangb,由于用户zhangb没有该文件的读权限,所以不能查看该文件只
[root@clstore3 ~] # su - zhangb
522868美元ls过程Makefile
-rw-r - - - - - -。1根根18709年5月22日17:32 Makefile
少522868美元Makefile
Makefile:拒绝访问
522868 522868 whoami
<强> >强,创建文件foo和bar后,运行图4 - 9日的程序,将发生什么情况?
什么都没有发生,权限为没有任何改变只
[root@clstore3 ~] #触摸foo酒吧
[root@clstore3 ~] # ls过程foo酒吧
-rw-r——r。1根根0 11月13日34条
-rw-r——r。1根根0 11月13日34 foo
root@clstore3 ~ #。/create_foobar
[root@clstore3 ~] # ls过程foo酒吧
-rw-r——r。1根根0 11月13日34条
-rw-r——r。1根根0 11月13日34 foo
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
root@clstore3 ~ #猫create_foobar。c
#包括“apue。h”
# include & lt; fcntl.h>
# define RWRWRW (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) int
主要(void)
{
, umask (0);
如果创造(" foo ", RWRWRW) & lt;0)
,,err_sys (“foo创建错误”);
, umask (S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
如果创造(“酒吧”,RWRWRW) & lt;0)
,,err_sys(“创建错误栏”);
,退出(0);
}
。5 4.12节中讲到一个普通文件的大小可以是0,同时我们又知道st_size字段是为目录或符号链接定义的,那么目录和符号链接的长度可否为0 ?
:对于普通文件,其文件长度可以是0,在开始读写这种文件是,将得到文件(文件尾)指示。
对于目录,文件长度通常是一个(16 or512)的整倍数只
符号链接——文件长度是在文件名中的实际字节数。
[root@clstore3/] # ls过程/dev/cdrom