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

求助:关于pipe写入的原子性

    来源: 互联网  发布时间:2017-02-08

    本文导语:  网上有篇文章叫做《深入理解Linux进程间通信》,其中有如下一段内容: ========================================================================================= 对管道的写规则的验证2:linux不保证写管道的原子性验证 #include  #include  ...

网上有篇文章叫做《深入理解Linux进程间通信》,其中有如下一段内容:
=========================================================================================

对管道的写规则的验证2:linux不保证写管道的原子性验证
#include 
#include 
#include 
main(int argc,char**argv)
{
       int pipe_fd[2];
       pid_t pid;
       char r_buf[4096];
       char w_buf[4096*2];
       int writenum;
       int rnum;
       memset(r_buf,0,sizeof(r_buf));     
       if(pipe(pipe_fd)0)
       {
       close(pipe_fd[0]);//write
       memset(r_buf,0,sizeof(r_buf));     
       if((writenum=write(pipe_fd[1],w_buf,1024))==-1)
              printf("write to pipe errorn");
       else  
              printf("the bytes write to pipe is %d n", writenum);
       writenum=write(pipe_fd[1],w_buf,4096);
       close(pipe_fd[1]);
       }     
}
 
输出结果:
the bytes write to pipe 1000
the bytes write to pipe 1000  //注意,此行输出说明了写入的非原子性
the bytes write to pipe 1000
the bytes write to pipe 1000
the bytes write to pipe 1000
the bytes write to pipe 120  //注意,此行输出说明了写入的非原子性
the bytes write to pipe 0
the bytes write to pipe 0
......

结论:
写入数目小于4096时写入是非原子的! 
如果把父进程中的两次写入字节数都改为5000,则很容易得出下面结论: 
写入管道的数据量大于4096字节时,缓冲区的空闲空间将被写入数据(补齐),直到写完所有数据为止,如果没有进程读数据,则一直阻塞。

=========================================================================================

抛开这个程序中的错误,请问这个程序为什么能说明写入的原子性,背后的原理是什么?求指导。

|
没看明白

pipe 写入的原子性,是说多个进程写入管道,如果每次写入的字节数目都小于PIPE_BUF,那么各个进程写入的数据彼此不会交叠

这个程序中,一个读,一个写,不知道演示了什么

|


++

原子性是为了并发写设计的, 大于PIPE_BUF就不保证了, 写交叉问题将会出现, 是一个不确定性编码了.

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












  • 相关文章推荐
  • [求助]fork与pipe
  • [求助]多个pipe怎么写
  • 高分求助高分求助高分求助高分求助高分求助高分求助
  • 怎样读取HZK24S前十区的内容啊???求助求助
  • 紧急求助!紧急求助!
  • 【求助】iplanet问题,求助高手解答!
  • 菜鸟求助,solaris下计算问题求助
  • 【求助】SOS紧急求助..............极为简单的问题...跪求....
  • 高分求助啊!求助SUSE 10.0 不能上网.
  • c/c++ iis7站长之家
  • 求助:linux下 vim的配置(高分求助)
  • red hat怎么安装gcc啊!总是出错,求助求助啊!!!yum源怎么改啊!!
  • 求助~~求助 ~~linux文件读写问题
  • 求助:信号 --13 进程中断
  • 求助,安装了红帽子后进不了
  • 新装linux求助
  • linux的 iptables问题求助
  • (高分求助)请问,那里有软件开发的<设计文档>
  • 一个简单的问题,高分求助!!!
  • 紧急求助:Unix下给文件夹重命名用什么命令?谢谢!!!!
  • VJ的一个问题,高分求助,熟悉VJ得请进!
  • 高分求助


  • 站内导航:


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

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

    浙ICP备11055608号-3