Mic*_*ael 39
界面.像其他人所说的那样,stdin
是FILE *
由标准c库定义的.你可以使用一些像更高级别的接口fread
,fwrite
和fprintf
.另一方面,STDIN_FILENO
它只是一个文件描述符(几乎肯定是0).这使用了一个稍微低级的界面,通过read
和write
.
deb*_*bug 11
从/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
Run Code Online (Sandbox Code Playgroud)
从 /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. */
Run Code Online (Sandbox Code Playgroud)
例如,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;
}
Run Code Online (Sandbox Code Playgroud)