1.此代码中发生了什么:
close(0)
现在,没有办法阅读输入?
2.关于这一点:
close(0)
dup(1)
我认为现在输入来自标准输出,但是意思是什么?
答案 0 :(得分:1)
这意味着您现在已经在文件描述符0上打开了stdout。是否可以从该文件描述符读取取决于您的stdout实际上是什么。如果您的stdout是具有输入和输出功能的终端(或伪终端),那么您可以阅读它。如果您的stdout是一个文件,启动程序的shell以只写模式打开,那么您可能无法读取它。
无论如何,你不应该依赖任何特定的行为;你不应该期望在这样做之后能够从文件描述符0中读取。
答案 1 :(得分:0)
似乎无法读取输入。但是,如果您碰巧预见到这种情况,您可以“保存”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!
正如Eric Postpischil所解释的,如果您的stdout
以读写方式连接到文件/设备(与终端一样),则执行dup(1)
后,恢复正常读取功能。但是没有什么不寻常的事情(就像程序自言自语)。