目录
文件I/O系统调用
open() 打开文件 create() 创建文件 close() 关闭文件 read() 读取文件 write() 写入文件 lseek() 文件定位
- 这些不带缓存的函数都是内核提供的系统调用。
- 它们不是ANSI C的组成部分,但是POSIX的组成部分。
文件操作方式
- 系统调用与C库
标准库函数 遵守ISO标准,基于流的I/O,对文件指针(FILE结构体)进行操作 系统调用 兼容POSIX标准,基于文件描述符的I/O,对文件描述符进行操作 open函数
#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);
- 参数
pathname
- 要打开或者创建的文件路径
flags
- 用来说明此函数的多个选择项:
- O_RDONLY 只读
- O_WRONLY 只写
- O_RDWR 读写
mode
- 新建文件的访问权限,对于open函数而言,仅当创建新文件时才使用第三个参数。
- open函数的flags参数
- 用下列一个或多个常数进行或运算构成flags参数(这些常数定义在<fcntl.h>头文件中)
O_RDONLY
- 以只读方式打开文件
O_WRONLY
- 以只写方式打开文件
O_RDWR
- 以读写方式打开文件
O_APPEND
- 以追加模式打开文件,每次写时都加到文件的尾端,但在网络文件系统进行操作时却没有保证
O_CREAT
- 如果指定的文件不存在,则按照mode参数指定的文件权限来创建文件
O_EXCL
- 如果同时指定了O_CREAT,而文件已经存在,则出错。这可测试一个文件是否存在。但在网络文件系统进行操作时却没有保证
O_DIRECTORY
- 如果参数pathname不是一个目录(其实目录也是文件的一种,也适用于文件操作函数
),则open出错O_TRUNC
- 如果此文件存在,而且为只读或只写成功打开,则将其长度截短为0
O_NONBLOCK
- 如果pathname指的是一个FIFO、一个块特殊文件(管道文件和设备文件)或一个字符特殊文件,则此选择项为此文件的本次打开操作和后续的I/O操作设置非阻塞方式
- 可见只能对特定类型的文件设置非阻塞功能,并不是所以文件都能以非阻塞的方式
打开和进行读写操作
- 对应的C库函数
FILE *fopen(const char *path,const char *mode);
creat函数
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int creat(const char *pathname, mode_t mode);
- 返回: 若成功为只写打开的文件描述符,若出错为-1
- 功能: 创建一个新文件
- 此函数等效于:
open(pathname, O_WRONLY | O_CREAT | O_TRUNC, mode)
- create的一个不足之处是它以只写方式打开所创建的文件。
close函数
#include <unistd.h> int close(int fd);
- 返回: 若成功为0,若出错为-1
- 功能: 关闭一个打开的文件
- 参数: fd:已打开文件的文件描述符
- 当一个进程终止时,它所有的打开文件都由内核自动关闭。
Linux程序设计:文件I/O系统调用、open函数、creat函数
猜你喜欢
转载自blog.csdn.net/baidu_41388533/article/details/108393333
今日推荐
周排行