返回信息流问一下这个代码为什么到注释那里就停了
代码在linux下可以运行 是关于 FIFO的
#include "unistd.h"
#include "stdio.h"
#include "string.h"
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <stdarg.h>
#include <syslog.h>
const unsigned int FILE_MODE=(S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
const char FIFO1[]="/tmp/fifo.1";
const char FIFO2[]="/tmp/fifo.2";
int main()
{
int readfd,writefd;
if((mkfifo(FIFO1,FILE_MODE)<0)&&errno!=EEXIST)
{
//错误处理 无视
char buff[100];
snprintf(buff,sizeof(buff),"can't creat %s",FIFO1);
perror(buff);
}
if((mkfifo(FIFO2,FILE_MODE)<0)&&errno!=EEXIST)
{
//错误处理 无视
unlink(FIFO1);
char buff[100];
snprintf(buff,sizeof(buff),"can't creat %s",FIFO2);
perror(buff);
}
printf("1\n");//到这里就停了
readfd=open(FIFO1,O_RDONLY,0);
writefd=open(FIFO2,O_WRONLY,0);
exit(0);
}
这是一条镜像帖。来源:北邮人论坛 / soft-design / #39691同步于 2010/11/12
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
程序挂掉了 核心代码很短 谁帮忙看一下
lockhart
2010/11/12镜像同步17 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
不是printf下一行停了?
【 在 lockhart (lockhart) 的大作中提到: 】
: 问一下这个代码为什么到注释那里就停了
: 代码在linux下可以运行 是关于 FIFO的
: #include "unistd.h"
: ...................
如果有另外一个进程,以写打开命名管道FIFO1,那么readfd=open(FIFO1,O_RDONLY,0); 就会从阻塞中返回了
或者你可以设置NONBLOCK标志来调用open函数
【 在 zxsword 的大作中提到: 】
: 如果有另外一个进程,以写打开命名管道FIFO1,那么readfd=open(FIFO1,O_RDONLY,0); 就会从阻塞中返回了
: 或者你可以设置NONBLOCK标志来调用open函数
哦 是不是说单进程必须设NONBLOCK 不然没办法破阻塞? 为什么这么设计呢?
管道的目的是进程间通信,单进程有什么意义?
如果单进程的话,除过以非阻塞模式打开,那肯定是阻塞的。
你可以设想一下进程之间的交互
【 在 lockhart 的大作中提到: 】
:
: 【 在 zxsword 的大作中提到: 】
: : 如果有另外一个进程,以写打开命名管道FIFO1,那么readfd=open(FIFO1,O_RDONLY,0); 就会从阻塞中返回了
: ...................
【 在 zxsword 的大作中提到: 】
: 管道的目的是进程间通信,单进程有什么意义?
: 如果单进程的话,除过以非阻塞模式打开,那肯定是阻塞的。
: 你可以设想一下进程之间的交互
哦 我只想简单试一下 fifo的用法 进程间的我试过了 谢谢啊
不客气
那本书我也读过,书名就是进程间通信,肯定是多进程之间么,呵呵~~
【 在 lockhart 的大作中提到: 】
:
: 【 在 zxsword 的大作中提到: 】
: : 管道的目的是进程间通信,单进程有什么意义?
: ...................
【 在 zxsword 的大作中提到: 】
: 不客气
: 那本书我也读过,书名就是进程间通信,肯定是多进程之间么,呵呵~~
再多问一句 为什么当前fifo没有已经被打开来读的话 打开来写会阻塞? 先把数据写进去不行么