Я должен выполнить файл, когда я только знаю дескриптор. Также возможно, что нет никаких ссылок на файл, настолько узнающий, что имя так или иначе не является опцией. Весь execve (), execvp (), и т.д. функционирует, берут имя файла. dlopen () также берет имя.
Ужасные решения (как чтение файла и вызов некоторого указателя функции) в порядке.
Используйте fexecve
.
PS: чтение файла и вызов некоторого указателя функции определенно не нормально. :)
Интересно. Я думаю, что лучше всего будет использовать FD для записи временного файла, а затем выполнить его с помощью обычного вызова exec.
Вы можете использовать mkstemp
для создания гарантированно уникального имени файла. Затем прочитайте содержимое из дескриптора файла и сбросьте его в временный файл. Затем используйте имя, данное вам mkstemp, в вызове exec.
Если вы по каким-то причинам не хотите писать новый файл, то, думаю, единственным вариантом будет ручной разбор образа exe-файла, загрузка его в память и вызов его функции main(). Это дублирует множество функций, которые уже существуют в ОС, и я не думаю, что вы хотите это делать. Это будет трудно сделать правильно, и не думаю, что это стоит усилий.