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

fork() 函数如果用文件描述符和文件指针得到的不同结果!

    来源: 互联网  发布时间:2016-04-08

    本文导语:  文件描述符大开 #include                 #include                 int     main() {         int     fd;         int     pid;         char    msg1[] = "Test 1 2 3 .. n" ;         char  ...

文件描述符大开
#include                
#include                

int     main()
{

        int     fd;
        int     pid;
        char    msg1[] = "Test 1 2 3 .. n" ;
        char    msg2[] = "Hello.hello n  " ;

        if (( fd = creat ("testfile" , 0644 )) == -1 )
                        return 0 ;
        if ( write ( fd , msg1 , strlen(msg1) ) ==-1 )
                        return 0 ;
        if ( ( pid = fork () ) == -1 )
        return 0 ;
        if ( write ( fd ,msg2 , strlen (msg2) ) == -1  )
        return 0 ;
        close ( fd ) ;
        return 1 ;
}


结果
Test 1 2 3 ..
Hello.hello
  Hello.hello

文件指针打开
#include                
#include                

int     main()
{

        FILE   *fp;
        int     pid;
        char    msg1[] = "Test 1 2 3 .. n" ;
        char    msg2[] = "Hello.hello n  " ;

        if (( fp = fopen ("testfile2" , "w" )) == NULL )
                        return 0 ;
        fprintf(fp,"%s",msg1 );
        if ( ( pid = fork () ) == -1 )
        return 0 ;
        fprintf(fp,"%s",msg2 );
        fclose ( fp ) ;
        return 1 ;
}

结果
Test 1 2 3 ..
Hello.hello
  Test 1 2 3 ..
Hello.hello
为什么会有这样的不同?


|
    系统调用写文件:用户空间无缓存管理,调用write后逻辑上可以认为msg1已经写入文件(虽然还有page cache和disk cache),fork后,父子进程只各输出msg2
     标准IO库函数写文件:默认为全缓存,调用fprintf后msg1只是输出到FILE*管理的用户缓存区里,fork后,子进程copy了父进程的很多数据包括刚才的缓存区中的msg1,所以最终父子进程各输出一个msg1
    总之,问题的关键在于是否缓存输出数据

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 还是有关fork的问题,fork在一个函数中调用,我被搞胡涂了
  • 弱弱的问:fork和exec的区别是什么? iis7站长之家
  • fork函数的源代码在哪呢
  • linux的fork()函数
  • minGW编译带fork函数的问题?
  • Linux fork() 函数
  • 关于fork()函数
  • fork函数的理解。。
  • fork函数,在线等待,马上结贴。谢谢!!!!!!!!!!!!
  • 关于fork函数
  • fork函数详解?
  • fork函数的处理流程
  • 执行一个main函数程序时,unix操作系统调用什么创建进程?fork?newproc?
  • Linux下关于fork()的函数
  • 谁有unix下c的编程接口资料,如fork函数和killppid的说明
  • Linux fork函数的系统调用实现过程是什么呢?
  • linux fork 函数问题
  • 费解呀,函数fork()的疑惑?
  • 怎么理解fork()函数返回两次值?
  • linux fork()函数的疑惑
  • 奇怪:程序一fork子进程时就停住了,似乎根本不能fork子进程啊?
  • unix中的fork2与fork有设么区别?
  • 程序在fork前申请了内存若干,在fork后子进程是否需要释放父进程之前申请的内存
  • 一个fork的问题
  • 新手的问题关于fork?
  • 急于明白Fork的用法.请提供中文解释.谢谢.
  • 关于fork的不解
  • 弱弱的问:fork和exec的区别是什么?
  • 关于fork的讨论
  • 关于fork的疑问?
  • fork之后的输出


  • 站内导航:


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

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3