unix编程(二)文件和目录

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;
}
上面读取文件也会读取到 . 和 .. 这两个目录的


你可能感兴趣的:(unix编程(二)文件和目录)