是stdin,0,STDIN是不同的东西

时间:2013-09-26 01:28:20

标签: c unix

stdin是一个指针,正如我在fgets()中看到的那样。

我使用'0'作为我们用于读取或写入错误的stdin并在fgets期间得到了段错误。

STDIN宏和0是否相同。

stdin是文件指针。请解释一下这个

2 个答案:

答案 0 :(得分:3)

stdin是来自FILE *

stdio.h
STDIN_FILENO == fileno(stdin)

STDIN_FILENO位于unistd.h中,用于write等函数,而stdin作为File *用于stdio函数,如printf

答案 1 :(得分:1)

stdin是一个扩展为FILE *类型表达式的宏(所以,是的,它是一个指针)。它的值未指定,但需要指向具体对象,因此它绝对是非NULL 0是一个整型常量,在指针上下文中使用时会转换为NULL指针。由此得出stdin != 0 STDIN未由标准C库定义。

您可能听说过与stdin对应的操作系统级文件描述符的值为0,这是真的,但文件描述符和FILE对象不是同样的事情,他们不能互换使用。 (如果你在Unixy系统上,请在某个时候阅读/usr/include/stdio.h。它只是“更多”C.通常在那里有一个FILE对象的具体定义,作为一个相当复杂的{{1} },即使标准不要求这样做。)

相关问题