我正在尝试制作一个迷你shell,其中命令通过管道相互连接。在代码的某些地方,我这样做:
close(1) //closing stdout
和
close(0) //closing stdin
然而,后来我分叉,所以我希望我的新子进程重置一切。那么我该怎么做呢:
*function_name_here*(1) //reopening stdout
和
*function_name_here*(0) //reopening stdin
如果您在unix类型的系统上(如果您调用fork
,您很可能是),您通常可以做以下两件事之一:
第一个是打开/dev/tty
,这将使您能够访问您的终端设备(假设终端设备是您想要的,而不是原始文件句柄)。
第二个是dup
文件句柄之前,你关闭它,所以你有一个可用的副本。然后,您可以使用dup2
将其收回。这里是Linux的详细信息,或者您也可以执行man dup
或man dup2
。