Что происходит с динамической выделенной памятью при вызове execv ()?
Я пишу простую оболочку как назначение курса ОС, мне нужно искать в пути, чтобы найти введенного пользователя программы, как только я найду правильный каталог, я malloc кусок памяти достаточно, чтобы держать имя каталога плюс имя программы, и я передаю его в качестве первого аргумента execv().
Я мог бы статически выделить 100 символов или около того, но наличие предела заставляет меня чувствовать себя неудобно. Поэтому, когда execv() выполняется, куча очищается или это часть памяти потерялся?
это, возможно, не много памяти, но мне просто любопытно.
1 ответов
когда вы exec()
, весь процесс (a) завершен, поэтому все ресурсы, включая динамическую память и некоторые fd, как показано ниже, восстанавливаются операционной системой и (b) заменяются: код, данные, потоки,...
Re файловые дескрипторы, от "man execve"
:
файловые дескрипторы, открытые в образе вызывающего процесса, остаются открытыми в новом образ процесса, за исключением тех, для которых установлен флаг close-on-exec (см. close (2) и fcntl(2)). Дескрипторы, остаются открытыми незатронуты с помощью вызова execve().