Linux程序设计:文件IO系统调用、open函数、creat函数

tech2024-10-06  16

目录

文件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:已打开文件的文件描述符当一个进程终止时,它所有的打开文件都由内核自动关闭
最新回复(0)