首页 > 代码库 > 文件系统编程(一)

文件系统编程(一)

★什么是文件系统

文件系统是文件存放在磁盘等存储设备上的组织形式。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—可执行。

那么要修改这个值该怎么办呢?

技术分享

重新创建文件后:

技术分享

文件系统编程(一)