这两个函数都是统计文件信息,区别是当文件时符号链接的时候stat统计的是符号链接的文件,而lstat统计的是符号链接本身。
统计文件得到的数据类型是stat结构体,其中有一个mode_t是文件类型,我们可以通过宏比如:S_ISREG()代表普通文件 S_ISDIR():目录文件等
在上一章create函数最后有一个mode参数,可以指定文件的访问权限。
这里mode:
S_IRUSR:用户读
S_IWUSR:用户写
S_IXUSR:用户执行
S_IRGRP: 组读
.....
...
S_IROTH:其他读
access(const char* pathname, int mode );
可以测试文件的执行权限:R_OK, W_OK, X_OK测试读、写、执行权限
一个进程用来屏蔽权限的
#define RWRWRW (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) int main(void) { umask(0);//什么都没有屏蔽 if (create("foo", RWRWRW) < 0) err_sys("create error for foo"); umask(S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);//屏蔽了组读写,和其他的读写 if (create("bar", RWRWRW) <0) err_sys("create error for bar"); exit(0); }
最后上面那个程序,foo的权限是rwrwrw,而bar的权限是rw-------
创建一个硬链接,删除一个文件的时候只有所有的链接全部没有了才会删除那个文件
将文件的链接数减1,当文件的链接数为1,但是进程还打开这个文件这个文件也不会删除。
因此可以在一个进程中打开一个文件,然后直接unlink,当进程终止的时候,会把这个文件直接删除。
创建符号链接
为什么会有符号链接?
1. 因为硬链接只能在同一个文件系统
2.只有root才能建硬链接
读目录
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #include <dirent.h> int main(int argc,char *argv[]) { DIR * dp; struct dirent *filename; dp = opendir(argv[1]); if (!dp) { fprintf(stderr,"open directory error\n"); return 0; } while (filename=readdir(dp))//读到null代表结束了 { printf("filename:%-10s\td_info:%ld\t d_reclen:%us\n", filename->d_name,filename->d_ino,filename->d_reclen); } closedir(dp); return 0; }上面读取文件也会读取到 . 和 .. 这两个目录的