CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Linux/Unix社区 >  程序开发区

命名管道

楼主shuimuyu(水木鱼)2005-05-17 10:12:20 在 Linux/Unix社区 / 程序开发区 提问

我这里有个命名管道的小程序,如下所示:  
  #include   <sys/types.h>  
  #include   <sys/stat.h>  
  #include   <errno.h>  
  #include   <fcntl.h>  
   
  #define   FIFO_file   "/tmp/fifo"  
  #define   DATA   "00000001"  
  main()  
  {  
      int   openfifo;  
      unlink(FIFO_file);  
      if((mkfifo(FIFO_file,O_WRONLY|O_CREAT))<0)  
                  {  
                    printf("1   error\n");  
                    exit(1);  
                  }  
      if((openfifo=open(FIFO_file,O_WRONLY))<0)  
                  {  
                    printf("2   error\n");  
                    exit(2);  
                  }  
      if(write(openfifo,DATA,8)   <   8){  
                    printf("3   error\n");  
                    exit(3);  
                  }  
    close(openfifo);  
  }  
  1、创建管道后,调用open打开,函数就阻塞在open上了,但是如果cat该管道,程序就能跑下去,这是为什么了?  
  2、如果open属性为O_RDWR,程序就能顺利跑下去,但是管道文件里头没东西了,这是什么原因?  
  欢迎高手指点 问题点数:20、回复次数:7Top

1 楼shuimuyu(水木鱼)回复于 2005-05-17 13:10:54 得分 0

各位高人帮帮忙啊Top

2 楼sharkhuang(走吧走吧!人总会慢慢长大~)回复于 2005-05-17 13:51:53 得分 1

upTop

3 楼loveleijuforever(苦力)回复于 2005-05-17 20:01:15 得分 6

其实你是阻塞在write了,只不过表面上看起来是阻塞在open.  
  命名管道自动支持进程阻塞,你没读没写的他怎么向下执行?你cat以后相当于读了,当然它向下执行了。  
  你翻了一个错误:命名管道必须同时有读写两个进程,只写或者只读都不行。Top

4 楼zjyu88(刚步入三流大学)回复于 2005-05-17 20:44:23 得分 6

你翻了一个错误:命名管道必须同时有读写两个进程,只写或者只读都不行。  
   
  一个进程在读或写,没有其它进程来对它这个FIFO写或读,应该会阻塞的啊...为什么不行??Top

5 楼shuimuyu(水木鱼)回复于 2005-05-18 08:55:25 得分 0

其实你是阻塞在write了,只不过表面上看起来是阻塞在open.  
   
  loveleijuforever(网民)   ,这句话能不能具体解释一下,因为用输出语句调试是停在open这个地方Top

6 楼shuimuyu(水木鱼)回复于 2005-05-19 08:46:46 得分 0

自己up一下Top

7 楼9653013(csL阴转晴)回复于 2005-05-19 15:07:12 得分 7

阻塞在open了。  
  open(FIFO_file,O_WRONLY)时,必须有一个进程open(FIFO_file,O_RDONLY),前一个函数才返回。  
  同样,write()的时候只有另外一个进程read,write才返回。Top

相关问题

  • 命名管道的问题。(windows环境)!!
  • 命名管道问题,请求帮助.
  • 请问什么是“命名管道”?
  • 关于命名管道一源程序运行这没老是不能创建命名管道成功呢?
  • 一个关于命名管道的送分题-》。。。。
  • 请问何时删除命名管道哪?
  • 怎么用命名管道实现异步通讯啊?
  • 请问,关于命名管道的安全问题。
  • 怎么改变命名管道的缓冲的大小
  • 命名管道中如何实现在一条管道中连续不断的送数啊;????

关键词

  • 命名
  • 命名管道
  • fifo
  • define
  • include

得分解答快速导航

  • 帖主:shuimuyu
  • sharkhuang
  • loveleijuforever
  • zjyu88
  • 9653013

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo