【发布时间】:2017-01-26 15:14:27
【问题描述】:
我有一个问题,学习标准 I/O。
#include <stdio.h>
int main(){
void *mem = malloc(0x80);
close(0)
/*
something code (solution)
*/
read(0,mem,0x80);
}
使用上面的代码,可以打开 stdin 吗? 在就 stackoverflow 提问之前,我认为 open('/dev/tty'); . 但它似乎没有完全打开标准输入。 我希望不要使用 dup()
【问题讨论】:
-
想象
stdin_fileno实际上是磁盘上文件的FD,它是最后一个这样的FD。关闭它后,该文件可能会被删除。所以原则上你绝对没有办法恢复指向同一个文件的封闭FD。当然,您可以将 FD 0 重新打开到 new 文件。 -
@KerrekSB 那么,如何在程序启动时创建标准输入?
-
@오우진:你有什么理由避免使用
dup或dup2? -
@BasileStarynkevitch 我想知道创建标准输入的实际原理。
-
@오우진:你没有。 FD已经打开。父进程通常会提供它们。