STDIN_FILENO的作用及与stdin 的区别
来源:互联网 发布:淘宝教育发布课程 编辑:程序博客网 时间:2024/05/18 00:37
转自:http://stackoverflow.com/questions/15102992/what-is-the-difference-between-stdin-and-stdin-fileno
The interface. Like everyone else has said, stdin
is a FILE *
as defined by the standard c library. You can use some of the higher level interfaces like fread
, fwrite
, and fprintf
. On the other hand, STDIN_FILENO
is just a file descriptor (almost certainly 0). This uses a slight lower level interface through the likes of read
and write
.
None of the answers mention that STDIN_FILENO
is a macro defined in <unistd.h>
. At least for a POSIX compliant system, it's not just "almost certainly 0"; it's required to be defined as 0. Similarly,STDOUT_FILENO
is 1 and STDERR_FILENO
is 2.
以及:http://blog.csdn.net/yeyuangen/article/details/6781999
1.STDIN_FILENO的作用
STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用。
操作系统一级提供的文件API都是以文件描述符来表示文件。STDIN_FILENO就是标准输入设备(一般是键盘)的文件描述符。
2.区别
1)数据类型不一致:
stdin类型为 FILE*
STDIN_FILENO类型为 int
使用stdin的函数主要有:fread、fwrite、fclose等,基本上都以f开头
使用STDIN_FILENO的函数有:read、write、close等
2)stdin等是FILE *类型,属于标准I/O,高级的输入输出函数。在<stdio.h>。
STDIN_FILENO等是文件描述符,是非负整数,一般定义为0, 1, 2,属于没有buffer的I/O,直接调用系统调用,在<unistd.h>。
3)STDIN_FILENO 是标准输入的文件描述符
详见/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. */
4)层次不一样。STDIN 属于标准库处理的输入流,其声明为 FILE 型的,对应的函数前面都有f开头,如fopen/fread/fwrite/fclose 标准库调用等
STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用。
标准库内封装了系统 API 调用,如 fread 内部实现调用 read。
5)操作系统一级提供的文件API都是以文件描述符来表示文件。STDIN_FILENO就是标准输入设备(一般是键盘)的文件描述符。
6)曾经很纳闷,为什么一个整形fd(STDIN_FILENO=0)就可以代表一个打开的文件呢?
后来明白了,和我们的手机号是类似的,手机号只是一个9位数的整形,但是在移动通话网络里,它就可以用来区分不同的手机终端。
标准C++一级提供的文件操作函数库都是用FILE*来表示文件,stdin就是指向标准输入设备文件的FILE*。
- STDIN_FILENO的作用及与stdin 的区别
- STDIN_FILENO的作用及与stdin 的区别
- STDIN_FILENO的作用及与stdin 的区别
- STDIN_FILENO的作用及与stdin 的区别
- STDIN_FILENO的作用及与stdin 的区别
- STDIN_FILENO的作用及与stdin 的区别
- STDIN_FILENO的作用及与stdin 的区别
- STDIN_FILENO的作用及与stdin 的区别
- STDIN_FILENO的作用及与stdin 的区别
- STDIN_FILENO的作用及与stdin 的区别
- STDIN_FILENO的作用及与stdin 的区别
- STDIN_FILENO的作用及与stdin 的区别
- STDIN_FILENO的作用及与stdin 的区别
- STDIN_FILENO的作用及与stdin 的区别
- STDIN_FILENO的作用及与stdin 的区别
- STDIN_FILENO的作用及与stdin 的区别
- STDIN_FILENO的作用及与stdin 的区别
- STDIN_FILENO的作用及与stdin 的区别
- Lovo 6月18号课程总结
- 新浪微博提示sso package or sign error
- Fedora下apache php文件无法写入
- JavaScript javaTomcat
- 习题3-38
- STDIN_FILENO的作用及与stdin 的区别
- 读设计师要懂心理学笔记9-人会犯错
- HDU 1002
- HC-05 蓝牙模块的调试与使用
- Virtual Box 下Red Hat 上网
- log4j+logback+slf4j的关系与调试
- 开始学习C++心得实例(5)
- sgu 210
- a的n次方的高效算法