gpt4 book ai didi

c - 如何导出打开的文件描述符以执行子级

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:25:06 27 4
gpt4 key购买 nike

如果需要将打开的文件描述符导出到使用 exec 系列库函数创建的子进程,有哪些可移植选项?

谢谢。

编辑。我知道子进程会继承开放描述符。但是他们如何在不知道它们的值的情况下使用这些描述符呢?我应该实现某种 IPC 以便将描述符传递给子进程吗?例如,如果父进程创建了一个管道,那么被执行的子进程如何知道管道的读/写端?

最佳答案

只是不要设置O_CLOEXEC open(2) 标志或其对应的(和标准的)FD_CLOEXEC fcntl(2 ) 描述符上的标志——默认情况下它将通过 exec*() 传递。

更新

感谢您的澄清,这确实改变了一些事情。

有几种可能性:

  • 使用命令行参数:gpg(1) 中的 GnuPG 提供命令行开关 --status-fd, --logger-fd, --attribute-fd, --passphrase-fd, --command-fd 它期望的每个文件描述符收到。如果要提交或检索多种数据,这可以让每个文件描述符专注于一种数据,并减少解析更复杂输出的需要。

  • 只处理文件并接受文件名作为参数;调用程序时,将文件名传递给它,例如 /dev/fd/5,并将输入安排在 fd 5 上在调用程序之前:

    cat /dev/fd/5 5</etc/passwd
  • 遵循约定:将 0 作为管道的读取端提供给子级,将 1 作为管道的写入端,并让它作为一个普通的管道“过滤器”命令。如果所有输入都可以通过单个文件描述符合理地发送,这绝对是最好的方法——并不总是可取的。

  • 使用环境变量来指示文件/socket/fd:

    SSH_AUTH_SOCK=/tmp/ssh-ZriaCoWL2248/agent.2248
    DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-CsUrnHGmKa,guid=e213e2...

    通过许多子程序传递文件信息真是太好了。

关于c - 如何导出打开的文件描述符以执行子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8240243/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com