Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.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显式打开Linux中的标准输出_C_Linux_Stdout_Stdin - Fatal编程技术网

从C显式打开Linux中的标准输出

从C显式打开Linux中的标准输出,c,linux,stdout,stdin,C,Linux,Stdout,Stdin,是否可以从C程序显式打开stdin、stdoutv和stderr,而无需使用dup()、dup2()或保存STDOUT\u文件号等 我知道它将默认打开。但是,如果我们关闭程序中的文件流并调用exec(),我如何在exec-d程序中重新打开它?成功打开文件后,它将返回 如果您的子进程在文件描述符0、1或2(也称为标准输入、输出、错误)上没有打开的文件,那么第一个open()将打开文件描述符0或标准输入;第二个将打开文件描述符1或标准输出;第三个将打开文件描述符2或标准错误。无需进一步调整。无需将d

是否可以从C程序显式打开
stdin
stdoutv
stderr
,而无需使用
dup()
dup2()
或保存
STDOUT\u文件号

我知道它将默认打开。但是,如果我们关闭程序中的文件流并调用
exec()
,我如何在exec-d程序中重新打开它?

成功打开文件后,它将返回

如果您的子进程在文件描述符0、1或2(也称为标准输入、输出、错误)上没有打开的文件,那么第一个
open()
将打开文件描述符0或标准输入;第二个将打开文件描述符1或标准输出;第三个将打开文件描述符2或标准错误。无需进一步调整。无需将
dup()
dup2()
-或
fcntl()
F_DUPFD
一起使用。文件流
stdin
stdout
stderr
希望使用文件描述符0、1、2。只要您在打开文件之前没有使用它们,它们就可以工作


您如何决定打开哪个文件是任何人的猜测。可能文件名是硬编码的,或者名称存储在环境变量中,或者有命令行参数指导您。

如果它们在程序启动时未打开,问题将变成什么的输入和输出?@aschepler,很抱歉,我没有收到您的问题。如果我想在第二个程序(exec-d)中接受来自键盘的输入,我必须重新打开在第一个程序中关闭的stdin流,对吗?我想知道如何做到这一点。我的意思是,一台计算机可以有许多虚拟控制台、十几个XTERM、几个SSH连接等等,所有这些都有自己处理输入和输出流的方法。OS和X服务器确定“键盘”何时影响其中一个,但这种情况一直在变化。此外,如果父级在分叉子级中关闭了其stdin,这意味着它不希望子级使用其输入,通常是因为在子级运行时它仍在处理输入。因此,试图获取其字符可能会变得很奇怪。因此,如果我必须从后续程序中打开一个流“stdin”以从键盘获取输入,我应该向“open()”传递哪些参数?可能您需要打开
“/dev/tty”