一个写管道程序问题

liyi54188 2011-08-04 04:48:28
我首先mkfifo -m 666 fifo1创建了个管道,然后执行下面程序,然而程序就输出 I am *****就没死过去了,好像是管道打开有问题,请教下为什么会出现这种情况,谢谢了!


#include <stdio.h>

#include <sys/stat.h>

#include <errno.h>

#include <stdlib.h>

#include <sys/types.h>

#include <fcntl.h>

#include <limits.h>

#include <unistd.h>

#include <time.h>


#define BUFSZ PIPE_BUF


int main(void)

{

int fd;

int n, i;

char buf[BUFSZ];

time_t tp;


printf("I am %d\n",getpid());


if((fd = open("fifo1", O_WRONLY)) < 0)
{

perror("fail to open");

exit(1);
}



for(i = 0; i < 10; i ++)

{

time(&tp);


n = sprintf(buf, "write_fifo %d sends %s", getpid(), ctime(&tp));
printf("Send msg:%s\n", buf);


if((write(fd, buf, n+1)) < 0)

{

perror("write");

close(fd);

exit(1);

}

sleep(3);

}


close(fd);


exit(0);

}
...全文
91 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
justkk 2011-08-04
  • 打赏
  • 举报
回复
嗯,管道需要读者
试试
if((fd = open("fifo1", O_RDWR)) < 0)
lidisha 2011-08-04
  • 打赏
  • 举报
回复
你看的是Linux c 程序设计大全吧,上面的代码好些都是有点问题的。
不过这个写fifo的倒是没有问题,但这个程序单独执行就是这个结果,写fifo卡死了。
如果想得到结果的话,是需要和下面的读fifo一起执行的。
在两个shell里,一个执行读fifo,一个执行写,这样的话才会有正确的结果。

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧