目录
文件I/O系统调用
文件操作方式
open函数
creat函数
close函数
文件I/O系统调用
open() |
打开文件 |
create() |
创建文件 |
close() |
关闭文件 |
read() |
读取文件 |
write() |
写入文件 |
lseek() |
文件定位 |
- 这些不带缓存的函数都是内核提供的系统调用。
- 它们不是ANSI C的组成部分,但是POSIX的组成部分。
文件操作方式
标准库函数 |
遵守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操作设置非阻塞方式
- 可见只能对特定类型的文件设置非阻塞功能,并不是所以文件都能以非阻塞的方式
打开和进行读写操作
|
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:已打开文件的文件描述符
-
当一个进程终止时,它所有的打开文件都由内核自动关闭。