一 前言
linux环境下,存在文件IO和缓存IO(标准IO)两种。这两种IO都提供stdin、stdout和strerr,即标准输入、标准输出和标准错误。那么问题来了,stdin是什么类型的数据呢?FILE *: int
二 测试
既然提出了问题,那么就来写代码验证。设计思路是利用C语言的编译规则。
FILE *isFILE();
int * isINT();
FILE *isFILE() {
return stdin;
}
int * isINT(){
return *stdin;
}
运行两个函数
运行结果
In function ‘isINT’:
error: incompatible types when returning type ‘FILE’ {aka ‘struct _IO_FILE’} but ‘int *’ was expected
return *stdin;
结论是stdin是FILE* 类型。
三 拓展
上面已经得出结论,stdin的类型变量跟标准IO有关,那文件IO要如何引用stdin呢?
参考《Linux系统编程》。文件描述符0、1、2分别表示stdin、stdout和stderr,但Linux用宏表示这三个,分别是STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO。
stdin 一般是连接到终端的输入设备用户键盘,而stdout和stderr是终端的屏幕。