调用open函数可以打开或创建一个文件:
#include <fcntl.h>
int open (const char *pathname,int flags,.../*mode_t mode*/ );
返回值:若成功返回文件描述符,若出错返回-1;
第三个参数写为...,表示余下参数的数量及类型根据具体的调用会有所不同。而对于open函数而言,
仅当创建新文件时才使用第三个参数。
参数说明:
pathname
是要打开或创建文件的名字(绝对路径/相对路径 + 文件名字);
flags
参数可用来说明此函数的多个选项。用以下一个或者多个常量进行“或”(|)运算构成flags参数。
(这些参数定义在<fcntl.h>头文件中);
O_RDONLY 只读打开
O_WRONLY 只写打开
O_RDWD 读、写打开
以上常量必须指定一个且只能指定一个。以下为可选常量:
O_APPEND 每次写时都追加到文件尾端(且为原子操作)。
O_CREAT 若此文件不存在,则创建它。使用该常量,需要第三个参数mode,
用以指定该文件的访问权限,如0644。
O_EXCL 如果同时指定了O_CREAT,而文件已存在,则会出错。用此可以测试一个文件是否存在,
如果不存在,则创建该文件,这使得测试与创建成为原子操作。
O_TRUNC 如果此文件存在,而且为只写或读写成功打开,则将其长度截短为0。
O_NOCTTY 如果pathname指的是终端设备,则不将该设备分配为此进程的控制终端
O_NOBLOCK 如果pathname指的是一个FIFO(管道文件),一个块特殊文件或一个字符特殊文件,
则此选项为文件的本次打开操作和后续I/O操作设置非阻塞模式。
O_DSYNC 使每次write等待物理I/O操作完成,但是如果写操作并不影响读取刚写入和输出选项的一部分。
O_RSYNC 使每一个以文件描述符作为参数的read操作等待,直至任何对文件同一部分进行的未决写操作都完成。
O_SYNC 使每次write都等到物理I/O操作完成,包括write操作引起的文件属性更新所需的I/O。
#include <fcntl.h>
int open (const char *pathname,int flags,.../*mode_t mode*/ );
返回值:若成功返回文件描述符,若出错返回-1;
第三个参数写为...,表示余下参数的数量及类型根据具体的调用会有所不同。而对于open函数而言,
仅当创建新文件时才使用第三个参数。
参数说明:
pathname
是要打开或创建文件的名字(绝对路径/相对路径 + 文件名字);
flags
参数可用来说明此函数的多个选项。用以下一个或者多个常量进行“或”(|)运算构成flags参数。
(这些参数定义在<fcntl.h>头文件中);
O_RDONLY 只读打开
O_WRONLY 只写打开
O_RDWD 读、写打开
以上常量必须指定一个且只能指定一个。以下为可选常量:
O_APPEND 每次写时都追加到文件尾端(且为原子操作)。
O_CREAT 若此文件不存在,则创建它。使用该常量,需要第三个参数mode,
用以指定该文件的访问权限,如0644。
O_EXCL 如果同时指定了O_CREAT,而文件已存在,则会出错。用此可以测试一个文件是否存在,
如果不存在,则创建该文件,这使得测试与创建成为原子操作。
O_TRUNC 如果此文件存在,而且为只写或读写成功打开,则将其长度截短为0。
O_NOCTTY 如果pathname指的是终端设备,则不将该设备分配为此进程的控制终端
O_NOBLOCK 如果pathname指的是一个FIFO(管道文件),一个块特殊文件或一个字符特殊文件,
则此选项为文件的本次打开操作和后续I/O操作设置非阻塞模式。
O_DSYNC 使每次write等待物理I/O操作完成,但是如果写操作并不影响读取刚写入和输出选项的一部分。
O_RSYNC 使每一个以文件描述符作为参数的read操作等待,直至任何对文件同一部分进行的未决写操作都完成。
O_SYNC 使每次write都等到物理I/O操作完成,包括write操作引起的文件属性更新所需的I/O。
由open返回的文件描述符一定是最小的未用描述符值。
#include <stdio.h> #include <fcntl.h> #include <sys/types.h> #include <sys.stat.h> int main(void) { int fd; /*打开第一个代码注释,执行两次,将报错open : File exists,原因是启用了O_EXCL*/ /*0600表示权限,往后会有描述,此数字表示用户有读写权限,没有执行权限*/ //fd = open("./test.txt",O_RDONLY|O_RSYNC|O_CREAT|O_EXCL,0600); //fd = open("./test.txt",O_RDONLY); //fd = open("./test.txt",O_WRONLY|O_CREAT|O_TRUNC,0600); //fd = open("./test.txt",O_WDWR); //fd = open("./test.txt",O_RDWR|O_CREAT|O_TRUNC,0600); fd = open("./test.txt",O_RDWR|O_CREAT|O_APPEND,0600); if(fd == -1) { perror("open");//打印出错信息 return 1; } printf("open success : %d\n",fd);//打印成功打开文件的描述符号 close(fd);//关闭文件描述符,往后会说明 return 0; } |