stdin, stdout и stderr совместно используются?
Я пытаюсь понять поведение трех потоков -stdout
, stdin
а такжеstderr
, Я не мог получить ответ из любого учебника, поэтому я пришел сюда.
Я знаю, что эти три хранятся в таблице дескрипторов файлов с файловыми дескрипторами 0 (stdin), 1 (stdout) и 2 (stderr). Мне также известно, что это не просто файловые дескрипторы, а потоки ввода / вывода, которые могут быть перенаправлены. Хорошо, а как насчет обмена?
Рассмотрим три случая:
Когда вызывается fork () : Дочерний процесс и родительский процесс совместно используют файловые дескрипторы, но имеют ли они одинаковые stdin, stdout и stderr?Когда поток создан : Потоки совместно используют файловые дескрипторы, но потоки ввода / вывода?Когда вызывается execl () В этом случае текущий образ процесса перезаписывается новым образом процесса. Если я сделаюexecl("./a.out", "a.out", NULL);
тогда получит ли этот новый исполняемый файл свежую копию stdin, stderr и stdout?Все мудрые ответы приветствуются.