首页 > 代码库 > 文件系统编程(一)
文件系统编程(一)
★什么是文件系统
文件系统是文件存放在磁盘等存储设备上的组织形式。Linux文件系统的实现采用了分层的体系结构,包括文件用户接口层、文件系统、设备驱动程序等
★文件系统编程包含哪些知识
◇文件的基本操作。包括文件的创建与打开、文件的读写、文件的关闭
◇文件的属性。包括文件属性的获取与设置
◇目录文件的操作。包括创建、删除、打开、关闭、读取、获取或更改当前工作目录等
★文件的基本操作
◇文件的打开与创建
1、文件的打开与创建可以使用一个open函数,它有两种形式:
#include<fcntl.h>
#include<sys/stat.h>
#include<sys/types.h>
int open(const char *filename, int flags);
int open(const char *filename, int flags, mode_t mode);
2、open函数参数介绍
◇filename:为要创建的文件名。如果只有文件名,那么程序与此文件名在同一目录下。
例程:
将程序编译并且运行得到:
可以得到编译的可执行文件creat_file与创建的test在相同的目录下面。如果要在指定目录下创建的文件该如何做呢?
只要在文件下面加上指定的目录就可以了!下面是上面例程修改的内容:
上面三个文件放在了/home/System_program目录下面:
将修改的程序编译运行得到:
◇flags:为打开文件的方式
1、O_RDONLY:以只读的方式打开
2、O_WRONLY:以只写的方式打开
3、O_RDWR :以读写的方式打开
4、O_APPEND :以追加的方式打开文件
5、O_CREAT :如果文件不存在,则创建一个文件并且使用参数mode设置权限
6、O_EXEC :如果使用了O_CREAT,但文件已经存在,返回错误信息
7、O_NOBLOCK:以非阻塞的方式打开文件
8、O_TRUNC :如果文件已经存在,则在写入数据之前先删除其原有的数据
◇mode:设置文件的访问权限
1、S_IRUSR:文件属主可读
2、S_IWUSR:文件属主可写
3、S_IXUSR:文件属主可执行
4、S_IRWXU:文件属主可读、写、执行
5、S_IRGRP:文件属组可读
6、S_IWGRP:文件属组可写
7、S_IXGRP:文件属组可执行
8、S_IRWXG:文件属组可读、写、执行
9、S_IROTH:其他用户可读
10、S_IWOTH:其它用户可写
11、S_IRWXO:其它用户可读、写、执行
12、S_ISUID:设置文件属主的执行ID
13、S_ISGID:设置文件属组的执行ID
3、umask值与文件权限之间的关系
还是这个程序,当我们对它编译运行后得到test1文件,从上面可以看出test1这个文件的权限都是读、写、可执行。但是查看文件权限的时候
可以看到test1的权限并不是open函数中想要的权限设置,这到底是什么原因造成的呢?
其实这与umask的值是有关系的。umask代表了文件或目录在创建时需要屏蔽掉的一些访问权限位。当进程创建一个文件时,文件的实际访问权限由mode&(~umask)公式决定。
0022这个值表示:创建的文件会自动屏蔽掉属组的写权限和其它组的写权限。因为在Linux文件权限中4—可读,2—可写,1—可执行。
那么要修改这个值该怎么办呢?
重新创建文件后:
文件系统编程(一)