重定向stdin两次?

时间:2014-11-06 01:21:54

标签: bash stdin

我有一个C程序,其scanf调用后跟read调用。我想使用printf提供两个输入。

printf 10 | program_name由于某种原因无法运作; scanf正确选择10,但read调用默认为" "并且甚至不会要求输入。

我想两次使用printf,一次将输入传递给scanf,第二次将输入传递给read。我怎么能这样做?

1 个答案:

答案 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会更糟糕。