是否可以通过管道连接到使用fpurse清除stdin的C程序?

是否可以通过管道连接到使用fpurse清除stdin的C程序?,c,unix,terminal,pipe,stdin,C,Unix,Terminal,Pipe,Stdin,我有一个程序,要求输入两次,但是在每次输入之间调用fpurge(stdin) 因此,如果我想输入“3”然后输入“Hello World”,我会尝试回显“3\nHelloWorld”|程序,但程序只会读取“3”,然后在读取“Hello World”之前刷新stdin。我尝试将程序输入重定向到命名管道,并在关闭管道之前一个接一个地写入命名管道两次,但没有成功 下面是部分程序的一些伪代码 num = read_user_input("Insert number: "); __fpurge(stdin)

我有一个程序,要求输入两次,但是在每次输入之间调用
fpurge(stdin)

因此,如果我想输入“3”然后输入“Hello World”,我会尝试
回显“3\nHelloWorld”|程序
,但程序只会读取“3”,然后在读取“Hello World”之前刷新stdin。我尝试将程序输入重定向到命名管道,并在关闭管道之前一个接一个地写入命名管道两次,但没有成功

下面是部分程序的一些伪代码

num = read_user_input("Insert number: ");
__fpurge(stdin);
name = read_user_input("Insert name: ");

有什么想法吗?谢谢。

您的程序最终将读取的数据超过解析对
read\u user\u input
的第一次调用所需的数据量(如果可用),这将导致
\u fpurge
放弃其余部分。避免这种情况的一种快速方法是
睡眠

(echo 3; sleep 1; echo HelloWorld) | program
这将导致第二行在
\u fpurge
运行之前不会发送到
程序,因此第二次调用
read\u user\u input
时可以使用该行


当然,这有点脆弱和粗糙,因此如果这是您自己的程序,而不是您无法编辑其源代码的CTF,您应该对其进行修改,使其不执行
\uu fpurge

读取用户输入的代码在哪里?为什么你认为
\uu fpurge
是一个好东西?@JosephSible,谢谢你的快速回复,
read\u user\u input
不是一个真正的函数,它只是一个伪代码,你可以假设它只是使用了一种典型的方式从C中的用户那里获取输入。我还应该提到这个程序不是我写的,这是一个CTF crackme,我正在寻找一种方法,将不可打印的字符插入程序的stdin。真正的代码代替
read\u user\u input
,非常重要,如果需要帮助,你需要发布它。你到底想做什么?@JosephSible,在位的代码
read\u user\u input
只是一个while循环,使用
fgetc(stdin)
不断检查它是否等于换行符或EOF,如果不将它添加到堆上分配的
char*
缓冲区(如果有帮助的话),但我要寻找的是一种将输入导入程序的方法,而不管如何实现
read\u user\u input