我有一个C程序,它有一个scanf
调用,然后是read
调用。我想使用printf
来馈送两个输入。
printf 10 | program_name
由于某种原因不能工作;scanf
正确地选择了10,但read
调用默认为",甚至不要求输入。
我想使用printf
两次,一次将输入传递给scanf
,第二次将输入传给read
。我该怎么做?
作为一个可怕的黑客,您需要确保scanf的缓冲区已满。类似于:
{ printf 10; dd if=/dev/zero bs=4094 count=1;
echo This text will go to the read if bufsize is 4096; } | program_name
这里的技术是依靠scanf读取前4096个字节来在第一次读取时填充缓冲区,将数据留在管道中等待读取。主要问题是它非常脆弱,需要深入了解所使用的缓冲。总的来说,这是一个糟糕的想法,但也不比在同一文件描述符上调用scanf之后再调用read糟糕多少。