文件操作的几套接口

基本接口:

文件读写:

#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_IRWXU 00700 文件所属用户有读写和执行权限
S_IRUSR (S_IREAD) 00400 文件所属用户有读权限
S_IMUSR (S_IWRITE) 00200 文件所属用户有写权限
S_IXUSR (S_IEXEC) 00100 文件所属用户有执行权限
S_IRWXG 00070 组内用户有读写和执行权限
S_IRGRP 00040 组内用户有读权限
S_IWGRP 00020 组内用户有写权限
S_IXGRP 00010 组内用户有执行权限
S_IRWXO 00007 其他用户有读写和执行权限
S_IROTH 00004 组内用户有读权限
S_IWOTH 00002 组内用户有写权限
S_IXOTH 00001 组内用户有执行权限
     

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

creat(pathname, mode)

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

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

你可能感兴趣的:(文件操作的几套接口)