是否可以在不使用stdin
,stdoutv
或保存stderr
等的情况下从我们的C程序中显式打开dup()
,dup2()
和STDOUT_FILENO
?
我知道它将默认为打开状态。但是说我们关闭程序中的文件流并调用exec()
,如何在exec-d程序中重新打开它?
open()
成功打开文件时,它返回open()
。
如果子进程在文件描述符0、1或2(又名标准输入,输出,错误)上没有打开文件,则第一个lowest not-open file descriptor将打开文件描述符0或标准输入;第二个将打开文件描述符1或标准输出;第三个将打开文件描述符2或标准错误。无需进一步调整。无需将open()
或dup()
或dup2()
与fcntl()
一起使用。文件流F_DUPFD
,stdin
和stdout
期望使用文件描述符0、1、2。只要打开文件之前未使用它们,它们就可以工作。
任何人都可以猜测如何确定打开哪个文件。也许文件名是硬编码的,或者文件名存储在环境变量中,或者有命令行参数可以指导您。