免费注册 查看新帖 |

Chinaunix

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

fifo问题,请高手们看一看。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-02-20 10:49 |只看该作者 |倒序浏览
我用mkfifo 创建管道之后,在write操作之前的open时,经常会出现errorno 6 Device not configured
请问这是为什么??怎样能够避免呢???

同时用netstat -an|more 看连接情况,发现

  1. Copy to clipboard]Active UNIX domain sockets
  2. Address  Type   Recv-Q Send-Q    Inode     Conn     Refs  Nextref Addr
  3. c5823dac stream      0      0 c5466948        0        0        0 /tmp/ssh-OrlGNb4I6W/agent.33823
  4. c654c000 stream      0      0        0 c6a8771c        0        0 /tmp/mysql-5.0.17.sock
  5. c6a8771c stream      0      0        0 c654c000        0        0
  6. c590db7c stream      0      0        0 c47d8c94        0        0 /tmp/mysql-5.0.17.sock
  7. c47d8c94 stream      0      0        0 c590db7c        0        0
  8. c47d82bc stream      0      0        0 c590dec4        0        0 /tmp/mysql-5.0.17.sock
  9. c590dec4 stream      0      0        0 c47d82bc        0        0
  10. c6fedaf0 stream      0      0        0 c590d604        0        0 /tmp/mysql-5.0.17.sock
  11. c590d604 stream      0      0        0 c6fedaf0        0        0
  12. c626b460 stream      0      0        0 c7123af0        0        0 /tmp/mysql-5.0.17.sock
  13. c7123af0 stream      0      0        0 c626b460        0        0
  14. c479c578 stream      0      0        0 c5851000        0        0 /tmp/mysql-5.0.17.sock
  15. c5851000 stream      0      0        0 c479c578        0        0
  16. c581d94c stream      0      0        0 c581d9d8        0        0
  17. c6799834 stream      0      0        0 c63027a8        0        0
  18. c63027a8 stream      0      0        0 c6799834        0        0
  19. c3907d20 stream      0      0        0 c521094c        0        0
  20. c521094c stream      0      0        0 c3907d20        0        0
  21. c646f7a8 stream      0      0        0 c5851230        0        0
  22. c5851230 stream      0      0        0 c646f7a8        0        0
  23. c7002460 stream      0      0        0 c6618230        0        0
  24. c6618230 stream      0      0        0 c7002460        0        0
  25. c47d8d20 stream      0      0        0 c654caf0        0        0
  26. c654caf0 stream      0      0        0 c47d8d20        0        0
  27. c64c0690 stream      0      0        0 c6489000        0        0
  28. c6489000 stream      0      0        0 c64c0690        0        0
  29. c38f9dac stream      0      0        0 c70029d8        0        0
  30. c70029d8 stream      0      0        0 c38f9dac        0        0
  31. c5817230 stream      0      0        0 c581d230        0        0
  32. c581d230 stream      0      0        0 c5817230        0        0
  33. c590da64 stream      0      0        0 c5df7e38        0        0
  34. c5df7e38 stream      0      0        0 c590da64        0        0
  35. c62711a4 stream      0      0        0 c479caf0        0        0
  36. c479caf0 stream      0      0        0 c62711a4        0        0
  37. c38f9118 stream      0      0        0 c6302578        0        0
复制代码


其中类似为“c38f9118 stream      0      0        0 c6302578        0        0”有10000多条,并且把所有进程都停止之后,这些也不消失。这些是怎吗产生的??我看别的机器stream就很少,我这这个机器就很多。 所以怀疑是fifo导致的

请高手们看一看



__________________________________

论坛徽章:
0
2 [报告]
发表于 2006-02-20 12:04 |只看该作者
有人能给一些帮助吗?

论坛徽章:
0
3 [报告]
发表于 2006-02-21 09:20 |只看该作者
有人吗?

论坛徽章:
0
4 [报告]
发表于 2006-02-21 10:02 |只看该作者
折磨我n长时间了,stream得数量在不停增长,到了1W多之后系统就再也建立不了stream了,进程停止,也不消失。只能从新启动机器。

论坛徽章:
0
5 [报告]
发表于 2006-02-21 10:03 |只看该作者
创建用的mkfifo(path,0666);
读打开用的open(path,O_RDONLY,0666);
写打开用的open(path,O_WRONLY|O_NONBLOCK);

论坛徽章:
0
6 [报告]
发表于 2006-02-21 10:20 |只看该作者

LZ可以看看下面的帖子

mkfifo(建立具名管道)  
相关函数  pipe,popen,open,umask

表头文件  #include<sys/types.h>
#include<sys/stat.h>

定义函数  int mkfifo(const char * pathname,mode_t mode);

函数说明  mkfifo()会依参数pathname建立特殊的FIFO文件,该文件必须不存在,而参数mode为该文件的权限(mode%~umask),因此umask值也会影响到FIFO文件的权限。Mkfifo()建立的FIFO文件其他进程都可以用读写一般文件的方式存取。当使用open()来打开FIFO文件时,O_NONBLOCK旗标会有影响
1、当使用O_NONBLOCK 旗标时,打开FIFO 文件来读取的操作会立刻返回,但是若还没有其他进程打开FIFO 文件来读取,则写入的操作会返回ENXIO 错误代码。
2、没有使用O_NONBLOCK 旗标时,打开FIFO 来读取的操作会等到其他进程打开FIFO文件来写入才正常返回。同样地,打开FIFO文件来写入的操作会等到其他进程打开FIFO 文件来读取后才正常返回。

返回值  若成功则返回0,否则返回-1,错误原因存于errno中。

错误代码  EACCESS 参数pathname所指定的目录路径无可执行的权限
EEXIST 参数pathname所指定的文件已存在。
ENAMETOOLONG 参数pathname的路径名称太长。
ENOENT 参数pathname包含的目录不存在
ENOSPC 文件系统的剩余空间不足
ENOTDIR 参数pathname路径中的目录存在但却非真正的目录。
EROFS 参数pathname指定的文件存在于只读文件系统内。

范例  #include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
main()
{
char buffer[80];
int fd;
unlink(FIFO);
mkfifo(FIFO,0666);
if(fork()>0){
char s[ ] = “hello!\n”;
fd = open (FIFO,O_WRONLY);
write(fd,s,sizeof(s));
close(fd);
}
else{
fd= open(FIFO,O_RDONLY);
read(fd,buffer,80);
printf(“%s”,buffer);
close(fd);
}
}

执行  hello!

ps:
http://net.pku.edu.cn/~yhf/linux_c/function/13.html
http://lists.gnu.org/archive/htm ... 05-05/msg00055.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP