【问题标题】:use stdout as the first argument of write [duplicate]使用 stdout 作为 write 的第一个参数 [重复]
【发布时间】:2020-08-30 13:54:03
【问题描述】:

我使用write 系统调用使用unistd.h 标头将文本发送到标准输出。 AFAIK,stdout 的数值是 1。那么为什么我不能使用stdout 而不是1 作为write 的第一个参数呢?

#include <unistd.h> // write
#include <stdio.h> // stdout

int main(void)
{
    write(stdout, "This will be output to standard out\n", 36);
    return 0;
}

谷歌说:标准输出值stdout。它的值为 1。

【问题讨论】:

  • 1 是一个intstdoutFILE*
  • @pmg 为什么?我无法得到它。
  • 因为C11 7.21...: 标题&lt;stdio.h&gt; 定义了... stdout 这是''指向文件的指针''类型的表达式
  • 您不能使用stdout,但可以使用STDOUT_FILENO

标签: c stdout system-calls


【解决方案1】:

要写入的第一个参数是一个文件描述符,它是一个整数。这是原生 Unix I/O。

stdout 这是一个用于 C 库 I/O 例程的对象。它是一个指向内部FILE 对象的指针。它不是整数。

stdout 在其他情况下意味着其他东西。我们经常用它来指代 Unix 的“标准输出”文件描述符的概念,它确实是 1。但这并不意味着任意编程语言中的“stdout”都等于 1。相反,它将是语言运行时处理输出所需的任何机制。

【讨论】:

    猜你喜欢
    • 2016-06-04
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    相关资源
    最近更新 更多