STDIN_FILENO的作用及与stdin 的区别

转载 2012年03月28日 10:49:00

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 的区别

1.STDIN_FILENO的作用 STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统...

STDIN_FILENO的作用与stdin的区别!!!

本文转载于:YEYUANGEN(讲解相当深刻,谢谢了):http://blog.csdn.net/yeyuangen/article/details/6781999 1.STDIN_FI...

UNIX下STDIN_FILENO与stdin区别

原文地址:UNIX下STDIN_FILENO与stdin区别作者:cyanic 标准输入 (stdin) 标准输入是指数据(通常是文件)走向程序。程序要求数据传输使用读的运算。并非...

STDIN_FILENO与stdin的区别

1.STDIN_FILENO的作用 STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用...

UNIX下STDIN_FILENO与stdin区别

标准输入 (stdin) 标准输入是指数据(通常是文件)走向程序。程序要求数据传输使用读的运算。并非所有程序都要求输入。如dir或ls程序(显示一个目录中的文件名)运行时不用任何输入。 ...

Linux中的STDIN_FILENO和STDOUT_FILENO

环境:Vmware Workstation;CentOS-6.4-x86_64 说明: STDIN_FILENO:接收键盘的输入 STDOUT_FILENO:向屏幕输出 程序: ...

验证daemon程序中setsid的作用以及重定向stdin、stdout、stderr的原因

daemon程序包括第一次fork、setsid、第二次fork、改变工作目录、关闭所有打开的描述符以及重定向stdin、stdout、stderr。 setsid发挥的作用是使得当前进程成为新会话的...

fflush(stdin)在gcc编译器中不起作用?

====================================================================================================...

系统API接口库中的STDIN_FILENO介绍以及与stdin的区分

dup/dup2有时会看到这样的参数STDIN_FILENO1.STDIN_FILENO的作用STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括...

c语言缓冲输入和非缓冲输入的分析(stdin和stdout流的应用,getchar,getch的区别)

一、缓冲输入和非缓冲输入的实例 1.1、缓冲输入实例 1.2、非缓冲输入实例 效果:按下一个字符,控制台屏幕就显示该字符。当按下‘#’字符时候,则提示press any key to contin...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:STDIN_FILENO的作用及与stdin 的区别
举报原因:
原因补充:

(最多只允许输入30个字)