我对linux系统的stdio有一些疑问。我知道fd 0,fd 1,fd 2分别引用stdin,stdout,stderr。stdin,stdout,stderr是否意味着打开文件描述符?
如果我像2>&1这样重定向它,文件描述符和打开的文件描述符之间的关系会怎样?
这是一个小型C程序fd.c
,它使用stdout
并将stderr
消息打印到控制台。
#include <stdio.h>
int main(int argc, char*argv[])
{
fprintf(stdout,"message for stdout\n");
/* fflush(stdout); */
fprintf(stderr,"message for stderr\n");
/* fflush(stderr); */
return 0;
}
编译: gcc -o fd fd.c
打开一个终端并测试运行:
./fd
./fd > /tmp/output.log
./fd > /tmp/stdout.log 2>/tmp/stderr.log
./fd > /tmp/all.log 2>&1
检查每个输出文件。如果它们顺序混乱,请取消注释该fflush
语句。
他们之间的关系没有任何变化,它们保持了以前的状态。0,1,2
默认情况下,描述符始终处于打开状态。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句