coding--open、fopen的差别
来源:互联网 发布:linux samba服务器配置 编辑:程序博客网 时间:2024/05/18 11:47
open是系统调用,对应无缓冲的io;fopen是C函数,对应缓冲的io,fopen会调用open实现。
程序中用open和write打开创建并把“hello world“写入文件test.txt,相应用fopen和fwrite操作文件test2.txt。
程序执行到open和fopen之后,sleep 15秒,这时用ls查看生成了文件没,这时用open打开的test.txt出现了,但是fopen的test2.txt没有;
当程序执行完write和fwrite之后,fopen的test2.txt仍然没有出现(还是用ls查看),再用cat看test.txt,可以看到 “helloworld”;
最后再关闭test.txt和test2.txt,这时test2.txt出现了,并且其内容也是“hello world”。
带缓存的文件操作是标准C库的实现,第一次调用带缓存的文件操作函数时标准库会自动分配内存并且读出一段固定大小的内容存储在缓存中。以后每次的读写操作并不是针对硬盘上的文件直接进行的,而是针对内存中的缓存的。何时从硬盘中读取文件或者向硬盘中写入文件有标准库的机制控制。不带缓存的文件操作通常都是系统提供的系统调用,更加低级,直接从硬盘中读取和写入文件,由于IO瓶颈的原因,速度并不如意,而且原子操作需要程序员自己保证,但使用得当的话效率并不差。另外标准库中的带缓存文件IO 是调用系统提供的不带缓存IO实现的。
“术语不带缓冲指的是每个read和write都调用内核中的一个系统调用。所有的磁盘I/O都要经过内核的块缓冲(也称内核的缓冲区高速缓存),唯一例外的是对原始磁盘设备的I/O。既然read或write的数据都要被内核缓冲,那么术语“不带缓冲的I/O“指的是在用户的进程中对这两个函数不会自动缓冲,每次read或write就要进行一次系统调用。“
--------摘自<unix环境编程>
- coding--open、fopen的差别
- fopen,open的区别
- open和fopen的区别
- open和fopen的区别
- open和fopen的区别
- fopen与open的区别
- open和fopen的区别:
- open和fopen的区别
- fopen和open的区别
- open和fopen的区别
- open和fopen的区别
- fopen与open的区别
- open和fopen的区别
- open与fopen的区别
- open和fopen的区别:
- open和fopen的区别
- fopen与open的区别
- open和fopen的区别
- MATLAB2012b+libSvm3.14+VS2010安装问题
- 8位灰度图像BMP的保存(很好的一篇文章)
- hdu 2767 超内存 哪位大神能帮忙改改
- [转] OS X v10.x里操控路由的命令(wireless优先出Internet)
- ctypes
- coding--open、fopen的差别
- 关于c++的动态绑定和静态绑定
- 设计心理学读书笔记 之一 记忆的结构
- 【map】【set】poj 3297
- 浏览器判断是否安装了ios/android客户端程序
- B树
- 安装mysql中遇到的问题
- 记在省赛
- Sql语言中的日期格式化函数getDate()