Ответ 1
Да. Открытые дескрипторы файлов сохраняются во время вызова exec
. Из execve
справочная страница (все вызовы exec*
являются всего лишь оберткой вокруг этого системного вызова):
По умолчанию файловые дескрипторы остаются открытыми через
execve()
. Закрытые дескрипторы файлов, отмеченные close-on-exec; см. описаниеFD_CLOEXEC
вfcntl(2)
.
-
Да, файловый дескриптор - это то, как пользовательское пространство ссылается на открывать файлы при создании системы звонки. (Или сокет, или труба и т.д.) Тот факт, что они могут быть дублированы, не меняет этого. Это просто несколько ссылок на один и тот же открытый файл. См. Также:
-
Да, как указано в цитате справочной страницы.
Фактически, многие программы (включая вашу оболочку) полагаются на эту функцию. Если бы это было не так, ваша программа запустилась без открытия стандартных дескрипторов файлов ввода/вывода/ошибок! Когда оболочка запускает программу, она fork
s, dup2
открывает дескрипторы открытого файла tty до 0,1,2, а затем execve
вашу новую программу.