stdin和STDIN_FILENO有什么区别?

时间:2013-02-27 02:13:21

标签: c

C中stdinSTDIN_FILENO之间的实际差异(如果有)?

5 个答案:

答案 0 :(得分:36)

界面。像其他人一样,stdin是标准c库定义的FILE *。您可以使用某些更高级别的界面,例如freadfwritefprintf。另一方面,STDIN_FILENO只是一个文件描述符(几乎肯定是0)。这通过类似readwrite

来使用略低级别的界面

答案 1 :(得分:14)

stdin是一个默认的FILE指针,用于从标准输入中获取输入。

STDIN_FILENO是默认的标准输入文件描述符编号,0。它本质上是一般用途的定义指令。

答案 2 :(得分:4)

来自 /usr/include/stdio.h

/* Standard streams.  */
extern struct _IO_FILE *stdin;          /* Standard input stream.  */
extern struct _IO_FILE *stdout;         /* Standard output stream.  */
extern struct _IO_FILE *stderr;         /* Standard error output stream.  */
/* C89/C99 say they're macros.  Make them happy.  */
#define stdin stdin
#define stdout stdout
#define stderr stderr

来自 /usr/include/unistd.h

/* Standard file descriptors.  */
#define STDIN_FILENO    0       /* Standard input.  */
#define STDOUT_FILENO   1       /* Standard output.  */
#define STDERR_FILENO   2       /* Standard error output.  */

例如,stdin中定义的_IO_FILE /usr/include/libio.h )是结构数据。 STDIN_FILENO是一个宏常量,它指向内核使用的文件描述符。

#include <stdio.h>
#include <unistd.h>

void
stdin_VS_STDIN_FILENO(void)
{
    printf("stdin->_flags = %hd\n", stdin->_flags);
    printf("STDIN_FILENO  : %d\n", STDIN_FILENO);
}

int
main(void)
{
    stdin_VS_STDIN_FILENO();
    return 0;
}

答案 3 :(得分:0)

stdin:1.文件指针(* FILE)         2.文件描述符表在处理过程中保留其地址            创建。         3.存在于/usr/include/stdio.h

STDIN_FILENO:1.这是一个宏                2.它只是文件描述符表的数组索引                    (默认为0)。                3.出现在/usr/include/unistd.h

通过以下代码可以更清楚。

q = fclusterdata(X,  t=1, metric='mahalanobis')

答案 4 :(得分:0)

Linux 头文件中的 STDIN_FILENO #include "unistd.h" 只是 0 的宏,当您使用 Linux 管道时,它代表管道的标准输入。