您的位置:首页 > 编程语言

unix编程(二)文件和目录

2016-04-21 18:35 274 查看

stat函数 lstat函数

这两个函数都是统计文件信息,区别是当文件时符号链接的时候stat统计的是符号链接的文件,而lstat统计的是符号链接本身。

统计文件得到的数据类型是stat结构体,其中有一个mode_t是文件类型,我们可以通过宏比如:S_ISREG()代表普通文件 S_ISDIR():目录文件等

文件访问权限

在上一章create函数最后有一个mode参数,可以指定文件的访问权限。

这里mode:

S_IRUSR:用户读

S_IWUSR:用户写

S_IXUSR:用户执行

S_IRGRP: 组读

.....

...

S_IROTH:其他读

函数access

access(const char* pathname, int mode );

可以测试文件的执行权限:R_OK, W_OK, X_OK测试读、写、执行权限

函数umask

一个进程用来屏蔽权限的

#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-------

link函数

创建一个硬链接,删除一个文件的时候只有所有的链接全部没有了才会删除那个文件

unlink函数

将文件的链接数减1,当文件的链接数为1,但是进程还打开这个文件这个文件也不会删除。

因此可以在一个进程中打开一个文件,然后直接unlink,当进程终止的时候,会把这个文件直接删除。

symlink函数

创建符号链接

为什么会有符号链接?

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;
}上面读取文件也会读取到 . 和 .. 这两个目录的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: