Я пишу оболочку и пытаюсь реализовать процесс подстановки .
форк-наследование всех файловых дескрипторов, выделенной памяти и т. д. Я понял, что execve должен также хранить такую информацию и сохранять каждый открытый файловый дескриптор всякий раз, когда флаг O_CLOEXEC не установлен.
Я попробовал простой скрипт на python:
fd.py:
#!/usr/bin/env python3
import sys, os
if __name__ == "__main__":
if len(sys.argv) == 1:
new_fd = open("the_content_file", "w+")
print("father table : ", os.listdir("/dev/fd"))
if os.fork() == 0:
os.execve("/PATH/OF/SCRIPT/fd.py", ["fd", "content"], os.environ)
else:
print("child table : ", os.listdir("/dev/fd"))
pass
и в качестве вывода я получаю:
father table : ['0', '1', '2', '3', '4']
child table : ['0', '1', '2', '3']
После разветвления я сохраняю ту же таблицу fd, но всякий раз, когда я использую execve для исполняемого файла, я теряю все и открываю fd по умолчанию.
Почему открытый фд исчезает?
Спасибо