【发布时间】:2014-09-18 09:30:11
【问题描述】:
我有一个写入 fifo 的 bash 脚本。我有一个从同一个 fifo 读取的 C 程序。
我确信脚本可以正常工作,因为我尝试使用另一个脚本从 fifo 读取数据并且一切正常。但是有些东西在 C 程序中不起作用。当我运行我的脚本和运行 C 程序时,就像他们在等待对方一样。这是代码。
脚本是(作者):
#!/bin/bash
fifo_name="myfifo";
# Se non esiste, crea la fifo;
[ -p $fifo_name ] || mkfifo $fifo_name;
echo "3" > $fifo_name;
echo "6" > $fifo_name;
这里是 c 程序(读者):
#include <fcntl.h>
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#define MAX_BUF 1024
int main(int argc, char *argv[])
{
int fd, i;
char * myfifo = argv[1];
char buf[MAX_BUF];
fd = open(myfifo, O_RDONLY);
while (1) {
if(read(fd, buf, MAX_BUF) > 0)
{
printf("Received: %s\n", buf);
}
}
close(fd);
return 0;
}
我哪里错了?
谢谢。
【问题讨论】:
-
一方面,在假设
open()调用成功并走向悬崖之前,不要检查它的结果。我猜,没有打破while循环的机制是一种奖励。