我有一个作为服务运行的程序,它从控制台获取标准输入,并将反馈打印到屏幕上。可以认为是下面这个简单的例子,而printf()
函数实际上是一些更复杂的函数。
//keyin.c
int main(int argc, char *argv[])
{
char buf[80];
int i = 1;
while(i++){
printf("enter %d string: \n", i);
scanf("%s", buf);
printf("print %d string: %s \n\n", i, buf);
sleep(2);
}
return 0;
}
现在我想使用命名管道作为输入,这样我就可以使用另一个程序通过写入管道来将所需的命令传递给服务,而不是在控制台中输入。
我通过以下方式创建了一个命名管道:
mknod MYFIFO p
然后我通过以下方式重定向输入:
root@ubuntu: ./keyin < MYFIFO
然后我通过以下方式将命令写入管道:
root@ubuntu: echo "test" > MYFIFO
我希望服务接受“测试”,将其打印出来,然后等待下一个输入,但是,在第一次运行之后,它会无限地打印出“测试”,并且即使我删除了也不会再次响应管道文件它。
我做错了什么?