(很抱歉最近没有照顾我的接受 - 我一有时间就会这样做;只是想问这个问题,现在它发生了)
考虑以下 C 程序:
int main(void) {
write(3, "aaaaaa\n", 7);
write(2, "bbbbbb\n", 7);
write(1, "cccccc\n", 7);
return 0;
}
bash
我像这样从 shell构建并运行它:
$ gcc -o wtest wtest.c
$ ./wtest 3>/dev/stdout
aaaaaa
bbbbbb
cccccc
我看到它的方式,在这种情况下,由于 fd 3 到的 shell 重定向stdout
,该文件描述符现在被“使用”(不确定“打开”,因为没有打开文件,至少在 C 代码中) - 所以我们将cccccc
字符串输出到终端,正如预期的那样。
如果我不使用重定向,那么输出是这样的:
$ ./wtest
aaaaaa
bbbbbb
现在 fd 3 没有被重定向 - 所以cccccc
字符串也没有像预期的那样输出。
我的问题是 - 这些cccccc
字节发生了什么?他们是否以同样的方式消失,就好像我将 fd 3 重定向到/dev/null
?(如:
$ ./wtest 3>/dev/null
)
此外,假设在特定情况下我想“隐藏” fd 3 输出:重定向“ 3>/dev/null
”与根本不处理 shell 中的 fd 3 之间是否存在性能差异(就流数据而言;也就是说,如果 fd 3 输出一个非常长的字节流,那么在 " " 情况下写入的每个字节是否会有指令惩罚3>/dev/null
,而不是不寻址 fd 3)?
非常感谢您的任何答案,
干杯!