免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3579 | 回复: 3
打印 上一主题 下一主题

fwrite()和write() [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-10 09:55 |只看该作者 |倒序浏览
代码如下:
  1. int main ()
  2. {
  3.   char buffer[1000];
  4.   FILE *pFile1,
  5.   int   iFile2;

  6.   pFile1=fopen ("myfile.txt","w");
  7.   iFile2=open ("myfile2.txt",O_WRITE | O_SYNC);

  8.   setbuf ( pFile1 , buffer );
  9.   const char* strANSC = "This is sent to a buffered stream";
  10.   fwrite(pFile1, strANSC, 1, strlen(strANSC));
  11.   fflush (pFile1);

  12.   const char* strPOSIX="This is sent to an unbuffered stream";
  13.   write(iFile2, strPOSIX, strlen(strPOSIX));

  14.   fclose (pFile1);
  15.   close (iFile2);

  16.   return 0;
  17. }
复制代码
在Linux运行时, 如果知道分别使用fwrite()/write调用系统内核写的次数 。write()是POSIX标准,不带
缓冲 的,每次的读写都要调用trap一次内核读写的系统调用。

[ 本帖最后由 SybaseLU 于 2007-7-10 09:59 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-07-10 13:35 |只看该作者
楼主想干啥呢,难道就是展示一下。

论坛徽章:
0
3 [报告]
发表于 2007-07-10 15:29 |只看该作者
fwrite 8192 的话,对于终端就要进行8次系统调用.(默认)
write 8192 就只需要一次系统调用.

论坛徽章:
0
4 [报告]
发表于 2007-07-18 14:25 |只看该作者
1 如果有100M大小的文件,用fopen()打开后,再用fread()读,一次读10M大小,如果用setbuf()将缓冲区设置为1M,那么fread()需要调用10次系统调用吗?
2 当进程中使用POSIX标准的open()/read()/write()...对文件操作时, 实际上是进程表中通过使用打开文件的文件表, 由文件中的v节点表来对磁盘操作,按照POSIX的标准来说,那么每次读写都要进行一次物理IO的动作吗?
3 ANSIC的标准如果打开100M大小的文件,是如何实现的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP