重定向stdin两次



我有一个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糟糕多少。

最新更新