当前位置:  技术问答>linux和unix

文件I/O和标准I/O,类似的程序,结果不同

    来源: 互联网  发布时间:2016-09-11

    本文导语:  在下面两个程序中,输出的文件中一个有三行输出,另一个却只有两行输出,不明白为什么?? #include  #include  int main() { int fd = 0, pid = 0; char msg1[] = "Test 1 2 3..n"; char msg2[] = "Hello, worldn"; if (-1 == (f...

在下面两个程序中,输出的文件中一个有三行输出,另一个却只有两行输出,不明白为什么??
#include 
#include 

int main()
{
int fd = 0,
pid = 0;

char msg1[] = "Test 1 2 3..n";
char msg2[] = "Hello, worldn";

if (-1 == (fd = creat("testfile1", 0644)))
return 0;
if (-1 == write(fd, msg1, strlen(msg1)))
return 0;

if (-1 == (pid = fork()))
return 0;

if (-1 == write(fd, msg2, strlen(msg2)))
return 0;

close(fd);
return 1;

}



#include 

int main()
{
FILE *fp = NULL;
int pid = 0;

char msg1[] = "Test 1 2 3..n";
char msg2[] = "Hello, worldn";

if (NULL == (fp = fopen("testfile2", "w"))) {
return 0;
}

fprintf(fp, "%s", msg1);

if ((pid = fork()) == -1)
return 0;

fprintf(fp, "%s", msg2);
fclose(fp);

return 1;
}

|
第二个程序用的是系统函数库,函数库的I/O先保存在用户层的缓存中,最后一次写入。程序执行流程大体如下:
1、程序通过fprintf将数据写到进程用户的缓存中。
2、程序fork出两个进程,新产生的子进程将全部复制父进程中的数据空间、堆和栈(包括前面用fprintf写到用户缓存中的数据)。
3、其中一个进程再次调用fprintf将数据写到用户缓存中。
4、其中一个进程调用fclose将缓存中的数据写到文件中(第一、二行)
5、另一个进程再次调用fprintf将数据写到用户缓存中。
6、另一个进程调用fclose将缓存中的数据写到文件中(第三、四行)

    
 
 

您可能感兴趣的文章:

  • ubuntu下类似windows的缓存文件,上网缓存文件在哪里阿?
  • 在Unix环境下用gcc如何编译成动态链接库文件?类似Windows下的DLL文件。
  • 请问各位linux开发大虾,linux下有类似VC中depends的工具可以查看文件调用了哪些so文件吗?
  • 利用文件系统过滤驱动实现 类似还原卡功能 的原理是什么?
  • Linux有没有类似bat文件,如何编写。
  • 有没有类似msdn的linux的帮助文件
  • sco unix中类似reg.sco的文件怎么执行?
  • 取某一路径下的类似文件名(50)
  • 在linux下有没有类似windows当中的dos95.BAT的文件
  • 如何读懂类似命令行的文件
  • linux下如何编写类似bat的文件?
  • GRUB的配置文件写好了,要用什么命令写入MBR?(类似于lilo)
  • 怎么在固定大小的内存里面做成一个类似于文件系统的缓存管理?
  • 请教:如何在指定目录下建立一个类似于.bat的文件并编辑它
  • linux如何记录当前进程状态(类似core文件)
  • 如何写一个shell程序搜索一个目录下的所有文件(类似find的功能)?
  • 如何在自己的FS上实现一个类似于linux reiserfs文件系统的简单FS
  • gcc或g++在编译时能否生成类似vc里面的map文件?从而可以从崩溃地址知道是有哪个函数里面
  • 在linux内核的.config文件中,类似 CONFIG_CC_ALIGN_LOOPS=0 的语句是什么意思?
  • 制作类似.bat批处理文件用来转移目录
  • 为什么jsp文件已经改动,但运行结果却还是改动前的结果?
  • 用JCreator Compile文件结果找不到生成的class文件
  • 为何XML文件用IE执行后的结果和原文件一样?没有执行?
  • 如何将命令的执行结果在屏幕输出的同时保存到文件
  • 用VIM做多行匹配,怎样才能将匹配结果输出到文件?
  • 怪怪怪!!我在linux里面弄了一个具有这样文件名:study article这样的文件夹,结果我用cd命令进不去!!
  • 可否用按钮调用SML文件,然后将运行的结果显示出来?
  • 如何将make的结果输出到文件中
  • 想将sar输出结果写在一个文件中,怎么做?
  • 结果可不可以同时标准输出,并且写入文件
  • 请问如何将VIM的查找结果输出到文件?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 用word2000将文档存为纯文本文件,所得文本文件不满足AScii标准?请教。
  • 请问文件格式(如.htm,.avi)的标准该怎么找?
  • 标准I/O 与 文件I/O
  • ? 如何获得一个文件的日期?(标准C)
  • 关于标准.zip文件解压的问题
  • 请问,使用GTK如何显示标准的浏览文件夹的对话框?HILDON提供吗?
  • 怎样只使用unix的标准工具找出一个文本文件的最长的一行?
  • linux下用标准C如何创建一个unicode文件
  • linux中标准c如何将XImage对象数据保存到bmp或jpg文件
  • 使用标准SAX解析XML文档如何获取文档编码信息及约束它的dtd文件路径.
  • 如何既定向到标准输出又定向到文件!
  • 将标准输出同时重定向到屏幕和文件
  • 2.6.x 下标准Modem 驱动是哪个或哪些文件
  • gcc与g++的区别和一般的标准库头文件怎么引用?
  • 怎样把标准输出指定到一个文件,这样我便不用关心运行时间长的程序的屏幕输出,待运行完后看文件里的内容就可以了吧?
  • Linux下C++编程时的包含标准库的头文件问题
  • 标准嵌入式linux系统分区/文件系统规划是什么样的?
  • 如何传递参数给linux shell 脚本(当脚本从标准输入而不是从文件获取时)
  • hp-unix下用标准C开发程序,头文件的问题<在线,有答案就揭帖>
  • 投票: 向微软说不!——反对微软(Microsoft Office)文件格式成为ISO标准!
  • C++ I/O 成员 eof():如果处于文件结尾处则返回true
  • Shell脚本如何递归现实一个文件夹中的文件(文件夹中含有文件夹)
  • WinDows8最新版文件夹加密
  • 求命令:什么命令可以把文件夹下所有的文件按修改时间先后排出来,包括子文件夹里的文件。
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • [提问]Linux下如何把多个.a文件编译一个.so文件,或者把多个.so文件编译成一个.so文件
  • python异常信息堆栈输出到日志文件
  • 请问:proc中的头文件中能包含头文件吗?(感觉如果头文件中包含头文件的话,在链接时就会有错误啊)
  • Centos6下安装Shell下文件上传下载rz,sz命令
  • 我要实现当进程打开文件时,根据文件名判断是否符合要求,符合后处理文件,再把文件返回给进程,怎么实现啊
  • HTML标签参考手册 iis7站长之家


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,