Chinaunix
标题:
fifo问题,请高手们看一看。
[打印本页]
作者:
famous
时间:
2006-02-20 10:49
标题:
fifo问题,请高手们看一看。
我用mkfifo 创建管道之后,在write操作之前的open时,经常会出现errorno 6 Device not configured
请问这是为什么??怎样能够避免呢???
同时用netstat -an|more 看连接情况,发现
Copy to clipboard]Active UNIX domain sockets
Address Type Recv-Q Send-Q Inode Conn Refs Nextref Addr
c5823dac stream 0 0 c5466948 0 0 0 /tmp/ssh-OrlGNb4I6W/agent.33823
c654c000 stream 0 0 0 c6a8771c 0 0 /tmp/mysql-5.0.17.sock
c6a8771c stream 0 0 0 c654c000 0 0
c590db7c stream 0 0 0 c47d8c94 0 0 /tmp/mysql-5.0.17.sock
c47d8c94 stream 0 0 0 c590db7c 0 0
c47d82bc stream 0 0 0 c590dec4 0 0 /tmp/mysql-5.0.17.sock
c590dec4 stream 0 0 0 c47d82bc 0 0
c6fedaf0 stream 0 0 0 c590d604 0 0 /tmp/mysql-5.0.17.sock
c590d604 stream 0 0 0 c6fedaf0 0 0
c626b460 stream 0 0 0 c7123af0 0 0 /tmp/mysql-5.0.17.sock
c7123af0 stream 0 0 0 c626b460 0 0
c479c578 stream 0 0 0 c5851000 0 0 /tmp/mysql-5.0.17.sock
c5851000 stream 0 0 0 c479c578 0 0
c581d94c stream 0 0 0 c581d9d8 0 0
c6799834 stream 0 0 0 c63027a8 0 0
c63027a8 stream 0 0 0 c6799834 0 0
c3907d20 stream 0 0 0 c521094c 0 0
c521094c stream 0 0 0 c3907d20 0 0
c646f7a8 stream 0 0 0 c5851230 0 0
c5851230 stream 0 0 0 c646f7a8 0 0
c7002460 stream 0 0 0 c6618230 0 0
c6618230 stream 0 0 0 c7002460 0 0
c47d8d20 stream 0 0 0 c654caf0 0 0
c654caf0 stream 0 0 0 c47d8d20 0 0
c64c0690 stream 0 0 0 c6489000 0 0
c6489000 stream 0 0 0 c64c0690 0 0
c38f9dac stream 0 0 0 c70029d8 0 0
c70029d8 stream 0 0 0 c38f9dac 0 0
c5817230 stream 0 0 0 c581d230 0 0
c581d230 stream 0 0 0 c5817230 0 0
c590da64 stream 0 0 0 c5df7e38 0 0
c5df7e38 stream 0 0 0 c590da64 0 0
c62711a4 stream 0 0 0 c479caf0 0 0
c479caf0 stream 0 0 0 c62711a4 0 0
c38f9118 stream 0 0 0 c6302578 0 0
复制代码
其中类似为“c38f9118 stream 0 0 0 c6302578 0 0”有10000多条,并且把所有进程都停止之后,这些也不消失。这些是怎吗产生的??我看别的机器stream就很少,我这这个机器就很多。 所以怀疑是fifo导致的
请高手们看一看
__________________________________
作者:
famous
时间:
2006-02-20 12:04
有人能给一些帮助吗?
作者:
famous
时间:
2006-02-21 09:20
有人吗?
作者:
famous
时间:
2006-02-21 10:02
折磨我n长时间了,stream得数量在不停增长,到了1W多之后系统就再也建立不了stream了,进程停止,也不消失。只能从新启动机器。
作者:
famous
时间:
2006-02-21 10:03
创建用的mkfifo(path,0666);
读打开用的open(path,O_RDONLY,0666);
写打开用的open(path,O_WRONLY|O_NONBLOCK);
作者:
Alvapku
时间:
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
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2