当前位置: 首页 > 面试题库 >

LINUX C中stdout和STDOUT_FILENO之间的区别

党建义
2023-03-14
问题内容

我想知道Linux C stdoutSTDOUT_FILENOLinux C 之间的区别。

经过一些搜索工作,我得出以下结论。您能帮我查看一下并纠正其中的任何错误吗?谢谢

  • 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_FILENO可用于描述系统中的任何设备。

stdout较高的水平(用户级?),实际所处封装的细节STDOUT_FILENOstdout有I / O缓冲区。

这就是我对它们的区别的了解。谢谢任何评论或纠正。


问题答案:

stdoutFILE*提供标准输出流的“常量”。因此显然fprintf(stdout,"x=%d\n",x);具有与相同的行为printf("x=%d\n", x);;您使用stdout<stdio.h>类似功能fprintffputs等等。

STDOUT_FILENO是一个整数文件描述符(实际上是整数1)。您可以将其用于writesyscall。

两者之间的关系是 STDOUT_FILENO == fileno(stdout)

(除非你喜欢做奇怪的事情后fclose(stdout);,或许有些freopen过了一段fclose(stdin),你应该几乎不这么做!

您通常喜欢这些FILE*东西,因为它们是经过缓冲的(因此通常表现良好)。有时,您可能需要调用fflush刷新缓冲区。

您可以为syscall使用文件描述符号,例如write(2)(由stdio库使用)或poll(2)。但是使用系统调用很麻烦。它可能会给您带来非常好的效率(但是很难编写代码),但是很多时候stdio库足够好(并且更加可移植)。

(当然,您应该#include <stdio.h>为stdio函数提供服务,并且#include <unistd.h>-和一些其他标头-
为syscall write所支持。stdio函数是通过syscalls实现的,因此fprintf可以调用write)。



 类似资料:
  • 问题内容: 我有两个问题,可能需要一些帮助来理解它们。 和之间有什么区别?我知道这 意味着在单独的外壳中运行命令,然后将其传递给变量。有人可以帮助我理解这一点吗?如果我错了,请纠正我。 如果我们可以使用并且效果很好,那我为什么不能使用它呢?两者的执行周期有何不同? 问题答案: 语法是令牌级别的,因此美元符号的含义取决于其所在的令牌。表达式是现代代名词,代表命令替换;这意味着运行并将其输出放在此处。

  • 问题内容: 我对和感到困惑。我有两本PHP书。一个说它们是相同的,但是另一个说它们是不同的。我以为他们也一样。 他们不一样吗? 问题答案: 是按位与。请参见按位运算符。假设您这样做: 是逻辑AND。请参阅逻辑运算符。考虑一下这个真值表:

  • 问题内容: 这个问题已经在这里有了答案 : JavaScript比较中应使用哪个等于运算符(== vs ===)? (49个答案) 5个月前关闭。 和之间的区别是什么?我也看过和运算符。还有更多这样的运营商吗? 问题答案: 并且是严格的比较运算符: JavaScript具有严格和类型转换相等性比较。为了相等,要比较的对象必须具有相同的类型,并且: 当两个字符串在相同位置具有相同的字符序列,相同的长

  • 问题内容: 我错放了太多次了,我想我一直忘记,因为我不知道两者之间的区别,只是一个给了我我期望的价值,而另一个却没有。 为什么是这样? 问题答案: 是的简写形式(尽管请注意,该表达式只会被计算一次。) 是的,即指定一元的到。 例子:

  • 问题内容: 因此,我有一段简单的代码可以打印出整数1-10: 然后,如果仅在第3行上更改一个运算符,它将打印出无限数量的1整数(我知道为什么会这样做)。为什么在运行第二个程序时没有出现语法错误?如果赋值运算符后面跟着一个加法运算符,它不会调用语法错误吗? 问题答案: 与相同, 只是意味着。