【问题标题】:How to execute a program from file descriptor?如何从文件描述符执行程序?
【发布时间】:2010-05-23 16:26:04
【问题描述】:

当我只知道描述符时,我需要执行一个文件。也有可能没有指向该文件的链接,因此以某种方式找出名称不是一种选择。所有 execve()、execvp() 等函数都采用文件名。 dlopen() 也有一个名字。

丑陋的解决方案(比如读取文件和调用一些函数指针)是可以的。

【问题讨论】:

    标签: c exec file-descriptor


    【解决方案1】:

    使用fexecve

    PS:读取文件并调用一些函数指针肯定是 OK。 :)

    【讨论】:

    • 我的意思是如果没有简单的解决方案也没关系。如果我可以调用 fexecve(),我不会那样做。谢谢。
    • 如果不支持 fexecve,你可以用 mmap 和 libelf 做一些可怕的事情——有点像制作 fdlopen。不过,那会很糟糕。不过,我很高兴了解 fexecve。我一直想知道它,但以前从未见过,也从未拥有过。
    • 您也可以使用文件 /dev/fd/n 或 /proc/self/fd/n,只需将 n 替换为文件编号并将其传递给常规 exec 调用。这就是 fexecve 在幕后的工作方式。
    【解决方案2】:

    有趣。我认为您最好的选择是使用 FD,您必须编写一个临时文件,然后使用普通的 exec 调用执行它。

    您可以使用mkstemp 来保证文件名的唯一性。然后从文件描述符中读取内容并将其转储到临时文件中。然后在 exec 调用中使用 mkstemp 给您的名称。

    如果你出于某种原因不想写一个新文件,那么我认为你唯一的选择就是手动解析 exe 文件图像,将其正确加载到内存中,然后调用它的 main()功能。这复制了操作系统中已经存在的许多功能,我认为您不想这样做。很难做到正确,而且似乎不值得付出努力。

    【讨论】:

      猜你喜欢
      • 2017-08-22
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-28
      相关资源
      最近更新 更多