1 2 3 4 5
| 头文件:#include<fcntl.h>//在centos6.0中只要此头文件就可以 #include<sys/types.h> #include<sys/stat.h> 功能:打开和创建文件(建立一个文件描述符,其他的函数可以通过文 件描述符对指定文件进行读取与写入的操作。)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| int open(const char*pathname,int flags); int open(const char*pathname,int flags,mode_t mode); 参数说明: 1.pathname 要打开或创建的目标文件 2.flags 打开文件时,可以传入多个参数选项,用下面的 一个或者多个常量进行“或”运算,构成falgs 参数: O_RDONLY: 只读打开 O_WRONLY: 只写打开 O_RDWR: 读,写打开 这三个常量,必须制定一个且只能指定一个 O_CREAT: 若文件不存在,则创建它,需要使 用mode选项。来指明新文件的访问权限 O_APPEND: 追加写,如果文件已经有内容,这次打开文件所 写的数据附加到文件的末尾而不覆盖原来的内容 O_EXCL如果要创建的文件已存在,则返回-1,并且修改errno的值
O_TRUNC如果文件存在,并且以只写/读写方式打开,则清空文件全部内容(即将其长度截短为0) O_NONBLOCK:如果打开的文件是一个管道、一个块设备文件或一个字符设备文件,则后续的I/O操作均设置为非阻塞方式 O_SYNC:使每次write都等到物理I/O操作完成,包括由该write操作引起的文件属性更新所需的I/O。
判断文件是否存在 O_CREAT | O_EXCL 必须同时使用
|
ps:open函数具体使用那个,和具体应用场景相关,如目标文件存在,使用两个参数的open,如果目标文件不存在,需要open创建,则第三个参数表示创建文件的默认权限
创建文件时 :本地有一个掩码,可以用umake命令查询
文件实际权限=文件掩码取反 & 文件权限
1 2 3 4 5 6 7 8 9
| 例如创建一个文件的权限是777,文件掩码是002 111 111 111 777 000 000 010 002 111 111 101 &111 111 111 777按位取反得来
111 111 101 & 111 111 111 = 111 111 101 实际权限是775
|
返回值
1 2 3
| 成功:新打开的文件描述符 失败:-1 open返回的文件描述符一定是最小的而且没有被使用的
|
close
1 2 3 4 5 6 7 8 9 10 11
| 头文件:#include<unistd.h> 功能:关闭一个已经打开的文件
int close(int fd) 参数说明: fd:是需要关闭的文件描述符 成功:返回0; 失败:返回-1,并设置errno
|
打开的文件描述符一定要记得关闭,否则资源会被大量的占用,导致内存不够
open函数中的erron全局变量
错误宏定义位置
1 2 3 4 5
| 第1-34个错误定义 /usr/include/asm-generic/errno-base.h
第35-133个错误定义 /usr/include/asm-generic/errno.h
|
是记录系统的最后一次错误代码.
代码是一个int型的值
使用perror读错误的信息
1 2 3 4 5 6
| 头文件 stdio.h void perror(const char *s) 用来将上一个函数发生错误的原因输出到标准设备(stderr) 参数s所指的字符串会先打印出,后面再加上错误原因字符串 此错误原因依照全局变量errno的值来决定要输出的字符串
|