C 如何将打开的文件描述符导出到已执行的子级
如果需要将打开的文件描述符导出到使用exec库函数族创建的子进程,可移植选项有哪些 多谢各位 编辑。我知道子进程继承开放描述符。但是他们如何在不知道其价值的情况下使用这些描述符呢?我是否应该实现某种IPC,以便将描述符传递给子进程?例如,如果父进程创建了一个管道,那么执行的子进程如何知道管道的读/写端呢?只是不要在描述符上设置O_CLOEXEC open2标志或其相应的标准FD_CLOEXEC fcntl2标志-默认情况下,它将通过exec*传递 更新 谢谢你的澄清,这确实改变了一些事情 有几种可能性: 使用命令行参数:gpg1中的GnuPG为它预期接收的每个文件描述符提供命令行开关-status fd、-logger fd、-attribute fd、-passphrase fd、-command fd。如果有几种类型的数据要提交或检索,这将使每个文件描述符集中于一种类型的数据,并减少解析更复杂的输出的需要 只需处理文件并接受文件名作为参数;调用该程序时,向其传递文件名,如/dev/fd/5,并在调用该程序之前将输入安排在fd 5上:C 如何将打开的文件描述符导出到已执行的子级,c,linux,unix,C,Linux,Unix,如果需要将打开的文件描述符导出到使用exec库函数族创建的子进程,可移植选项有哪些 多谢各位 编辑。我知道子进程继承开放描述符。但是他们如何在不知道其价值的情况下使用这些描述符呢?我是否应该实现某种IPC,以便将描述符传递给子进程?例如,如果父进程创建了一个管道,那么执行的子进程如何知道管道的读/写端呢?只是不要在描述符上设置O_CLOEXEC open2标志或其相应的标准FD_CLOEXEC fcntl2标志-默认情况下,它将通过exec*传递 更新 谢谢你的澄清,这确实改变了一些事情 有几种
cat /dev/fd/5 5</etc/passwd
通过许多子程序传递文件信息很好
简单地说,不要在描述符上设置O_CLOEXEC open2标志或其相应的标准FD_CLOEXEC fcntl2标志-默认情况下,它将通过exec*传递
更新
谢谢你的澄清,这确实改变了一些事情
有几种可能性:
使用命令行参数:gpg1中的GnuPG为它预期接收的每个文件描述符提供命令行开关-status fd、-logger fd、-attribute fd、-passphrase fd、-command fd。如果有几种类型的数据要提交或检索,这将使每个文件描述符集中于一种类型的数据,并减少解析更复杂的输出的需要
只需处理文件并接受文件名作为参数;调用该程序时,向其传递文件名,如/dev/fd/5,并在调用该程序之前将输入安排在fd 5上:
cat /dev/fd/5 5</etc/passwd
通过许多子程序传递文件信息很好
如果我的问题不清楚,很抱歉,但我对使描述符值可用于子进程感兴趣。我知道除非设置了O_CLOEXEC,否则描述符在exec之后仍然是打开的,但是子进程如何获取描述符的值呢?我需要实现某种IPC吗?我更新了我的问题。谢谢你的详细回答。这是非常有帮助的。你能澄清你关于使用文件和接受文件名作为参数的观点吗?。。。我想知道为什么这个问题没有更多的观点。人们通常不会遇到这个问题吗?人们不尝试从已执行的程序访问打开的文件描述符吗?如果我的问题不清楚,很抱歉,但我对使描述符值可用于子进程感兴趣。我知道除非设置了O_CLOEXEC,否则描述符在exec之后仍然是打开的,但是子进程如何获取描述符的值呢?我需要实现某种IPC吗?我更新了我的问题。谢谢你的详细回答。这是非常有帮助的。你能澄清你关于使用文件和接受文件名作为参数的观点吗?。。。我想知道为什么这个问题没有更多的观点。人们通常不会遇到这个问题吗?人们不尝试从已执行的程序访问打开的文件描述符吗?