当我只知道描述符时,我需要执行一个文件。也可能没有指向该文件的链接,因此以某种方式找出名称不是一种选择。所有 execve()、execvp() 等函数都采用文件名。dlopen() 也有一个名字。
丑陋的解决方案(比如读取文件和调用一些函数指针)是可以的。
当我只知道描述符时,我需要执行一个文件。也可能没有指向该文件的链接,因此以某种方式找出名称不是一种选择。所有 execve()、execvp() 等函数都采用文件名。dlopen() 也有一个名字。
丑陋的解决方案(比如读取文件和调用一些函数指针)是可以的。
使用fexecve
.
PS:读取文件并调用一些函数指针肯定不行。:)
有趣的。我认为你最好的选择是使用你必须编写一个临时文件的 FD,然后使用普通的 exec 调用来执行它。
您可以使用mkstemp
保证唯一的文件名。然后从文件描述符中读取内容并将其转储到临时文件中。然后在 exec 调用中使用 mkstemp 给您的名称。
如果您出于某种原因不想编写新文件,那么我认为您唯一的其他选择是手动解析 exe 文件图像,将其正确加载到内存中,然后调用它的 main() 函数。这复制了操作系统中已经存在的许多功能,我认为您不想这样做。很难做到正确,而且似乎不值得付出努力。