目录
文件I/O系统调用
文件操作方式
open函数
creat函数
close函数
文件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
如果此文件存在,而且为只读或只写成功打开,则将其长度截短为0O_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:已打开文件的文件描述符
当一个进程终止时,它所有的打开文件都由内核自动关闭。