【发布时间】:2016-04-14 15:01:59
【问题描述】:
我有以下 C 程序:
#include<stdio.h>
main()
{
char buf[64];
gets(buf);
printf("Your input: %s\n", buf);
gets(buf);
printf("Your input: %s\n", buf);
}
我想使用管道或重定向向程序发送数据。问题是程序不等待第二次进入新数据。
例如
$ echo "a" | ./test
输出:
Your input: a
Your input: a
如何让程序在每次使用管道或重定向时等待用户输入。 P.S 我没有写入 /proc/$pid/fd/0 的权限,也不必更改代码。
任何帮助将不胜感激。
【问题讨论】:
-
1.) 不要使用
gets()。 2.) 尝试scanf("%64s", buf);这可以防止缓冲区溢出。可能有更好的解决方案。只是我的第一个想法,您可以使用什么。 -
谢谢,但我不必更改代码。
-
您不想更改它?或者你不能?抱歉,我没有阅读有问题的最后一句话。但是我还是不明白是什么意思。对于我的第一个答案 - 这不是解决方案,只是一些提示。
-
@Enkeli
scanf("%63s", buf);,而不是scanf("%64s", buf); -
@الطيب 你的问题是“如何让程序在管道数据结束后等待用户输入?”这样第一个
gets应该得到a而第二个应该等待用户输入?
标签: c linux bash redirect pipe