Что является противоположностью close (fd) в C? - PullRequest
1 голос
/ 23 октября 2011

Я пытаюсь создать мини-оболочку, в которой команды передаются друг другу.В некоторых местах кода я делаю:

close(1) //closing stdout

и

close(0) //closing stdin

Однако позже я разветвляюсь, поэтому я хочу, чтобы мой новый подпроцесс сбросил все.Так как бы я:

*function_name_here*(1) //reopening stdout

и

*function_name_here*(0) //reopening stdin

1 Ответ

6 голосов
/ 23 октября 2011

Если вы работаете в системе типа UNIX (и, скорее всего, - это , если вы звоните fork), вы обычно можете сделать одну из двух вещей.

Первый - открыть /dev/tty, который предоставит вам доступ к вашему терминальному устройству (при условии, что вам нужно именно терминальное устройство, а не оригинальный дескриптор файла).

Второй - dup этот дескриптор файла, прежде чем закрыть его, чтобы получить пригодную для использования копию. Затем вы можете использовать dup2, чтобы вернуть его. Подробности для Linux здесь , или вы также можете выполнить man dup или man dup2.

...