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