从C显式打开Linux中的标准输出
是否可以从C程序显式打开从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
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”
。