码迷,mamicode.com
首页 > 其他好文 > 详细

文件系统编程(一)

时间:2014-12-27 21:49:11      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:linux   文件系统   编程   

★什么是文件系统

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

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

技术分享

重新创建文件后:

技术分享

文件系统编程(一)

标签:linux   文件系统   编程   

原文地址:http://blog.csdn.net/xgsilence/article/details/42174253

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!