文件操作的几套接口

37 篇文章 0 订阅

基本接口:

文件读写:

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

int open(const char* pathname,int flags)

int open(const char* pathname,int flags,mode_t mode);

int creat(const char *pathname, mode_t mode)

参数说明:

pathname :要打开的文件名

flags:标志位,指定打开文件的操作方式以及打开时的一些行为。

mode:用于新文件的权限标志位。

返回值:

-1: 操作失败,并设置变量errno的值

不为 -1:文件描述符,


flags参数的取值可以为:

1、O_RDONLY :以只读的方式打开文件

2、O_WRONLY :以只写的方式打开文件

3、O_RDWR : 以读写的方式打开文件

以上三种取值是互斥的,不能同时使用,但是他们可以和以下的取值用或的方式组合起来使用:

1、O_CREAT :如果被打开的文件不存在,就自动穿件这个文件

2、O_EXCL :如果O_CREAT标志已经使用,那么当由pathname参数指定的文件已经存在时,open函数返回失败。如果pathname给出的是一个符号链接,那么无论它指向的文件是否存在,对open函数的调用都会返回失败。

3、O_NOCITY :如果被打开的文件是一个终端设备文件,它不会成为这个进程的控制终端。

4、O_TRUNC :如果被打开的文件存在并且是以可写方式的打开的,则清空文件原有的内容

5、O_APPEND :新写入的内容将被添加在文件原来内容的后面,

6、O_NONBLOCK :被打开的文件将以非阻塞的方式进行操作

O_NONBLOCK一样。7、O_NDELAY : 同

8、O_SYNC :被打开的文件将以同步I/O的方式进行操作,即任何写操作都会同步到硬件设备上。同步完成后,对写函数的调用才会返回。

9、O_NOFOLLOW :如果pathname是一个符号链接,则对open函数的调用将返回失败。

10、O_DIRECTORY :如果pathname不是目录,则对open函数的调用将返回失败。

需要注意的事,open函数有两个原型,其中一个多出了mode,它用于指定创建的新文件的访问权,如果打开的时候使用了O_CREAT标志创建文件,则一般都要给出mode参数,她的一些常用取值如表1.0所示,这些值可以用按位或的方式进行组合使用。新文件的所属用户和所诉组合

S_IRWXU00700文件所属用户有读写和执行权限
S_IRUSR (S_IREAD)00400文件所属用户有读权限
S_IMUSR (S_IWRITE)00200文件所属用户有写权限
S_IXUSR (S_IEXEC)00100文件所属用户有执行权限
S_IRWXG00070组内用户有读写和执行权限
S_IRGRP00040组内用户有读权限
S_IWGRP00020组内用户有写权限
S_IXGRP00010组内用户有执行权限
S_IRWXO00007其他用户有读写和执行权限
S_IROTH00004组内用户有读权限
S_IWOTH00002组内用户有写权限
S_IXOTH00001组内用户有执行权限
   

因为在调用open函数的时候,O_WRONLY,O_CREAT,O_TRUNC三个标志位经常组合使用,因此由一个专门的函数creat()来实现,如下:

creat(pathname, mode)

实际等价于:open(pathnames,O_WRONLY|O_CREAT|O_TRUNC, mode)

两个不同进程可以同时打开同一个文件,但是他们的文件描述符一般是不一样的,也可以同时对该文件进行读写,只是后面进程写的会覆盖前面进程写的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值