Linux系统编程手册 文件I/O缓冲
来源:互联网 发布:淘宝优惠券代理 编辑:程序博客网 时间:2024/05/16 16:59
文件I/O内核缓冲
read、write系统调用在操作磁盘文件时不会直接发起磁盘访问,而是仅仅在用户空间缓冲区与内核缓冲区之间复制数据。
例如:如下调用将3个字节的数据从用户空间内存传递到内核空间的缓冲区中:
write(fd, "abc", 3);
write随即返回。在后续的某个时刻,内核会将其缓冲区的数据写入磁盘。如果在此期间,另一个进程试图读取该文件的这几个字节,那么内核将自动从缓冲区中提供这些数据,而不是从文件中。
同理,读取数据。内核从磁盘中读取数据到内核缓冲区。read调用将从缓冲区读取数据,直到把缓冲区数据读完,这是内核会将文件的下一段内容读入到内核缓冲区。
采用这样的设计,使read write调用更为快速,不需要等待磁盘操作,也更为高效,减少了磁盘的传输次数。
stdio库的缓冲
当操作磁盘文件时,缓冲大块数据可以减少系统调用,C语言函数库的I/O函数 fgets fgetcfprintf等就是这么做的。
我们可以调用setvbuf可以控制stdio库使用缓冲的形式。有下面3种:
1.不对I/O缓冲,等于每个stdio函数直接操作write read函数
2.采用行缓冲
3.采用全缓冲
我们可以使用fflush库函数强制将stdio输出流中的数据刷新到内核缓冲区。
int fflush(FILE *stream);
控制文件I/O的内核缓冲
有时候我们需要强制刷新内核缓冲区到磁盘文件。
fsync将与打开文件描述符fd相关的所有内核中的缓冲数据刷新到磁盘中。
int fsync(int fd);
sync会使包含更新文件信息的所有内核缓冲区刷新到磁盘上
void sync(void);
我们在调用open函数打开文件的时候,可以指定O_SYNC,这样每次write调用都会将文件数据刷新到磁盘上
1 0
- Linux系统编程手册 文件I/O缓冲
- Linux系统编程第13章-文件I/O缓冲
- linux系统编程手册 I/O复用
- linux编程之缓冲型文件I/O
- Linux系统文件I/O编程(三)---I/O多路复用
- Linux系统文件I/O编程(三)---I/O多路复用
- [温故而知新] 《Linux/Unix系统编程手册》——文件I/O
- [UNIX系统编程] I/O缓冲
- linux系统编程之文件I/O
- 【linux系统编程】C标准I/O函数和系统无缓冲函数(Unbuffered I/O函数)关系
- Linux系统编程_2_文件I/O(系统调用&库函数)
- Linux系统文件I/O编程(二)---文件锁函数
- Linux系统文件I/O编程(二)---文件锁函数
- linux文件设备与I/O:C标准I/O函数与无缓冲I/O
- linux 文件I/O 编程
- Linux 文件I/O编程
- linux文件I/O编程
- linux文件I/O编程
- c++ 引用
- Java格式化UTC格式时间
- iOS的快捷键使用陆续整理
- rest @PathParam
- 【奔跑的菜鸟】Java中的引用传递
- Linux系统编程手册 文件I/O缓冲
- iOS 警告合集
- Bootstrap模态对话框
- arcengine中的几何镜像
- 多线程学习-基础(一)
- Android类参考---Fragment(四)
- SnackBar使用详解
- View.setId在Android studio下使用报错的解决办法
- Linux 基本常识