我正在尝试创建一个迷你shell,其中命令相互通过管道传输。在我的代码中的某些点:
close(1) //closing stdout
和
close(0) //closing stdin
但是后来我正在分叉,所以我希望我的新子进程重置所有内容。那我该怎么做:
*function_name_here*(1) //reopening stdout
和
*function_name_here*(0) //reopening stdin
答案 0 :(得分:6)
如果您使用的是UNIX类型系统(如果您正在调用fork
,则很可能 ),通常可以执行以下两种操作之一。
首先是打开/dev/tty
,这将使您可以访问终端设备(假设终端设备是您想要的而不是原始文件句柄)。
第二个是关闭它之前dup
该文件句柄,这样你就有了一个可用的副本。然后,您可以使用dup2
将其恢复。 Linux here的详细信息,或者您也可以执行man dup
或man dup2
。