博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STDIN_FILENO的作用及与stdin 的区别
阅读量:2300 次
发布时间:2019-05-09

本文共 1138 字,大约阅读时间需要 3 分钟。

分类: 
 
1246人阅读 
(0) 
 

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*。

转载地址:http://xdkib.baihongyu.com/

你可能感兴趣的文章
搭建ssm环境
查看>>
深入理解平衡二叉树,B树,B+树
查看>>
使用LinkedList实现LRU
查看>>
SpringIoC加载流程
查看>>
java对象的创建过程
查看>>
深入理解CAS底层实现
查看>>
Find Minimum in Rotated Sorted Array
查看>>
Search for a Range
查看>>
堆排序
查看>>
路由器
查看>>
稳定排序和不稳定排序
查看>>
指针和引用的区别
查看>>
空悬指针和野指针
查看>>
RAII 资源获取就是初始化
查看>>
explicit关键字
查看>>
函数指针 回调函数
查看>>
带参数的main
查看>>
typedef
查看>>
vector重新申请内存
查看>>
C++ STL 排序源码详解(一)
查看>>