关闭标准输入

时间:2012-07-24 15:50:21

标签: c

1.此代码中发生了什么:

 close(0)

现在,没有办法阅读输入?

2.关于这一点:

close(0)
dup(1)

我认为现在输入来自标准输出,但是意思是什么?

2 个答案:

答案 0 :(得分:1)

这意味着您现在已经在文件描述符0上打开了stdout。是否可以从该文件描述符读取取决于您的stdout实际上是什么。如果您的stdout是具有输入和输出功能的终端(或伪终端),那么您可以阅读它。如果您的stdout是一个文件,启动程序的shell以只写模式打开,那么您可能无法读取它。

无论如何,你不应该依赖任何特定的行为;你不应该期望在这样做之后能够从文件描述符0中读取。

答案 1 :(得分:0)

  1. 似乎无法读取输入。但是,如果您碰巧预见到这种情况,您可以“保存”stdin描述符,如下所示:

    int stdin_save;
    ...
    stdin_save = dup(0);
    ...
    close(0); // Here it is "impossible" to read input
    ...
    dup(stdin_save); // Possible to read input again!
    
  2. 正如Eric Postpischil所解释的,如果您的stdout以读写方式连接到文件/设备(与终端一样),则执行dup(1)后,恢复正常读取功能。但是没有什么不寻常的事情(就像程序自言自语)。