c语言——不带缓冲的文件 I/O操作

本文详细介绍了C语言中不带缓冲的文件I/O操作,包括文件描述符的概念,open、close、read、write等核心函数的使用,以及lseek、pwrite、pread、dup、dup2等高级函数的功能。此外,还讨论了sync、fsync、fdatasync等用于同步数据到磁盘的函数和fcntl、ioctl用于获取和设置文件属性的函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 文件描述符

文件描述符是一个非负整数。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。将其作为参数传送给 read 或 write等操作。

UNIX 系统 shell 使用文件描述符 0 与进程的标准输入相关联,文件描述符 1 与进程的标准输出相关联,文件描述符 2 与进程的标准出错输出相关联。

2 不带缓冲的 I/O 函数

术语不带缓冲指的是每个 read 或 write 都调用内核中的一个系统调用,即user态不存在缓冲区存在。

2.1 open 函数 

#include <fcntl.h>
int open(const char *pathname, int oflag, ... /* mode_t mode */);
#include <fcntl.h>  
int open(const char *pathname, int oflag, ... /* mode_t mode */); 

对于 open 函数而言,仅当创建新文件时才使用第三个参数。

pathname 是要打开或创建文件的名字。

oflag 参数用于说明此函数的多个选项。用下列一个或多个常量进行“或”运算构成 oflag 参数(这些常量定义在 <fcntl.h> 头文件中)。

  O_RDONLY  只读打开

  O_WRONLY  只写打开

  O_RDWR   读、写打开

这三个常量中必须指定一个且只能指定一个。下列常量则是可选的:

  O_APPEND  每次写时都追加到文件的尾端。

  O_CREAT  若文件不存在,则创建它。使用此选项时,需要第三个参数 mode,用于指定该新文件的访问权限位。

  O_EXCL  如果同时指定了O_CREAT,而文件已经存在,则会出错。用此可以测试一个文件是否存在,如果不存在,则创建此文件。

  O_TRUNC  如果此文件存在,而且为只写或者读写成功打开,则将其长度截短为 0.

  O_NOCTTY  如果 pathname 指的是终端设备,则不将该设备分配为此进程的控制终端。

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值