我有一个C程序,其scanf
调用后跟read
调用。我想使用printf
提供两个输入。
printf 10 | program_name
由于某种原因无法运作; scanf
正确选择10,但read
调用默认为" "并且甚至不会要求输入。
我想两次使用printf
,一次将输入传递给scanf
,第二次将输入传递给read
。我怎么能这样做?
答案 0 :(得分:2)
作为一个可怕的黑客,您需要确保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会更糟糕。