我想知道在Linux C中,stdout
和STDOUT_FILENO
的区别。
经过一番搜索,我得出了以下结论。请帮我审核并纠正其中的任何错误。谢谢。
stdout
属于C语言标准I/O流,其类型为FILE*,定义在stdio.h中。STDOUT_FILENO
具有int类型,在unistd.h中被定义。它是LINUX系统的文件描述符。在unistd.h中,它被解释如下:
The following symbolic constants shall be defined for file streams: STDERR_FILENO File number of stderr; 2. STDIN_FILENO File number of stdin; 0. STDOUT_FILENO File number of stdout; 1.
据我看来,
STDOUT_FILENO
属于系统级调用,某种程度上,它类似于系统 API,可以用于描述系统中的任意设备。
stdout
位于更高级别(用户级别?),实际上封装了STDOUT_FILENO
的细节。其中stdout
具有 I/O 缓冲区。这就是我对它们之间差异的理解。欢迎任何评论或纠正,感谢。
STDOUT_FILENO
不仅仅是Linux专用的,所有符合POSIX标准(包括Unix)的系统都有这个命令(例如,MacOSX、FreeBSD或Solaris)。 - Basile Starynkevitch