Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何将打开的文件描述符导出到已执行的子级_C_Linux_Unix - Fatal编程技术网

C 如何将打开的文件描述符导出到已执行的子级

C 如何将打开的文件描述符导出到已执行的子级,c,linux,unix,C,Linux,Unix,如果需要将打开的文件描述符导出到使用exec库函数族创建的子进程,可移植选项有哪些 多谢各位 编辑。我知道子进程继承开放描述符。但是他们如何在不知道其价值的情况下使用这些描述符呢?我是否应该实现某种IPC,以便将描述符传递给子进程?例如,如果父进程创建了一个管道,那么执行的子进程如何知道管道的读/写端呢?只是不要在描述符上设置O_CLOEXEC open2标志或其相应的标准FD_CLOEXEC fcntl2标志-默认情况下,它将通过exec*传递 更新 谢谢你的澄清,这确实改变了一些事情 有几种

如果需要将打开的文件描述符导出到使用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上:

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吗?我更新了我的问题。谢谢你的详细回答。这是非常有帮助的。你能澄清你关于使用文件和接受文件名作为参数的观点吗?。。。我想知道为什么这个问题没有更多的观点。人们通常不会遇到这个问题吗?人们不尝试从已执行的程序访问打开的文件描述符吗?