STDIN_FILENO与stdin
STDIN_FILENO与stdin的区别:
STDIN_FILENO:
1).数据类型:int
2).层次:系统级的API,是一个文件句柄,定义在<unistd.h>中。
3).相应的函数:open(),close(),read(),write(),lseek()等系统级别的函数。
stdin:
1).数据类型:FILE *
2).层次:c语言的提供的标准输入流。c语言标准库封装系统函数实现。高级的输入输出函数。可在<stdio.h>中找到外部声明。
3).相应的函数:fopen(),fclose(),fread(),fwrite(),fseek()等c语言标准函数。
<unistd.h>
/* Standard file descriptors. /
#define STDIN_FILENO 0 / Standard input. /
#define STDOUT_FILENO 1 / Standard output. /
#define STDERR_FILENO 2 / Standard error output. */
<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
在unix系统调用中,标准输入描述字用stdin,标准输出用stdout,标准出错用stderr表示,但在一些调用函数,引用了STDIN_FILENO表示标准输入,同样,标准出入用STDOUT_FILENO,标准出错用STDERR_FILENO.
请问,他们有什么区别吗?
1、stdin等是FILE *类型,属于标准I/O,在<stdio.h>。
STDIN_FILENO等是文件描述符,是非负整数,一般定义为0, 1, 2,属于没有buffer的I/O,直接调用系统调用,在<unistd.h>。
2、 数据类型不一致:
stdin类型为 FILE*
STDIN_FILENO类型为 int
使用stdin的函数主要有:fread、fwrite、fclose等,基本上都以f开头使用STDIN_FILENO的函数有:read、write、close等
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就是标准输入设备(一般是键盘)的文件描述符。
标准C++一级提供的文件操作函数库都是用FILE来表示文件,stdin就是指向标准输入设备文件的FILE。
6、stdin 由标准C库实现, STDIN_FILENO是指0号文件描述符,文件描述符是linux内核(类unix操作系统)专有概念,对文件描述符的操作属于系 统调用,无法在windows或其他系统中找到。在linux下,stdin的实现必然依赖于文件描述符。也就是说这两个东西在不同的层次,一个是用户 层的C库,一个是系统层的系统调用。
7、 可以这样理解stdin结构中包含了STDIN_FILENO文件描述符。文件描述符是最底层的一个类型,可以用来表示系统中的任何设备,FILE *在 文件描述符的基础上封装了一个机构,里面有相应的缓存信息。
8、 记住类型不同就ok了,一般linux下面大写的都是数字。就跟宏定义差不多。代表文件描述符。 一般read,write什么的都是对数据进行处理 的。但stdin这种的话,一看就是小写的饿,不是数字,是指针。是句柄。如果学过看过windows编程就知道的。它是一个结构。fopen是封装 过的,用stdin。
9、 曾经很纳闷,为什么一个整形fd(STDIN_FILENO=0)就可以代表一个打开的文件呢?后来明白了,和我们的手机号是类似的,手机号只是 一个9位数的整形,但是在移动通话网络里,它就可以用来区分不同的手机终端。
STDIN_FILENO与stdin相关推荐
- STDIN_FILENO和stdin区别
在unix系统调用中,标准输入描述字用stdin,标准输出用stdout,标准出错用stderr表示,但在一些调用函数,引用了STDIN_FILENO表示标准输入才,同样,标准出入用STDOUT_FI ...
- STDIN_FILENO 与stdin的区别
1.STDIN_FILENO的作用 STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用 ...
- linux stdin STDIN_FILENO 区别
stdin 由标准C库实现, STDIN_FILENO是指0号文件描述符是linux内核(类unix操作系统)专有概念 STDIN_FILENO与stdin的区别: STDIN_FILENO: 1). ...
- 0729------Linux网络编程----------使用 select 、poll 和 epoll 模型 编写客户端程序
1.select 模型 1.1 select 函数原型如下,其中 nfds 表示的描述符的最大值加1(因为这里是左闭右开区间),中间三个参数分别表示要监听的不同类型描述符的集合,timeout用来表示 ...
- UNIX再学习 -- 文件I/O
上一篇讲完文件描述符,接下来进入正题,文件的处理函数. 一.函数 open 详细内容,可自行 man creat 查看 #include <sys/types.h> #include &l ...
- Operating System lab1(操作系统课程设计实验1)
操作步骤 把如下文件放到一个目录下 再依次执行以下命令 make mkdir web ./webserver 8088 ./web display.c /** Copyright (c) 1989, ...
- linux c之STDIN_FILENO的作用及与stdin的区别
1.STDIN_FILENO的作用 STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用 ...
- stdin和STDIN_FILENO的区别
在unix系统调用中,标准输入描述字用stdin,标准输出用stdout,标准出错用stderr表示,但在一些调用函数,引用了STDIN_FILENO表示标准输入才,同样,标准出入用STDOUT_FI ...
- 对stdin,stdout 和STDOUT_FILENO,STDIN_FILENO的学习
在unix系统调用中,标准输入描述字用stdin,标准输出用stdout,标准出错用stderr表示,但在一些调用函数,引用了STDIN_FILENO表示标准输入才,同样,标准出入用STDOUT_FI ...
- UNIX环境高级编程笔记(2)- STDIN_FILENO、STDOUT_FILENO和stdin、stdout的区别
目录 前言 一.STDIN_FILENO.STDOUT_FILENO介绍 二.stdin.stdout介绍 三.代码例程 1.文件描述符的使用 2.流的使用 3.代码标记 总结 前言 本章主要通过UN ...
最新文章
- 第十三届全国大学生智能汽车竞赛获奖名单
- Algorithm:树相关算法(BBT/BST/B树/R树)简介(二叉查找树、二叉查找树的插入节点、二叉查找树的删除、二叉树的遍历、平衡二叉树)C 语言实现
- 蓝桥杯java第三届决赛第一题--星期日
- Escape字符总结
- hdu 1257最少拦截系统 动态规划
- 【NLP】fastText词向量与文本分类工具
- LocalDateTime、LocalDate、Date的相互转换(亲测LocalDateTime转LocalDate)
- python常用快捷键、写代码事半功倍_Pycharm常用快捷键总结及配置方法
- bt解析 开源 java_修复开源项目 btcd RPC 实现比特币获取区块的问题
- 建模算法(八)——插值
- 人工智能知识体系的学习路线(南京大学人工智能学院本科生培养体系)
- Git使用ssh方式下载代码
- android 仿qq 功能,Android仿QQ、新浪相册的实现
- 基于STC单片机串口扩展网络通信的应用
- 机房环动监控系统作用
- NBA篮球运动员大数据分析决策支持系统
- Java六大线程池和四大拒绝策略
- 计算机代表数字的通用码是什么,数字信息在计算机中的表示及编码.ppt
- 2022-2028全球与中国立式填模封口机市场现状及未来发展趋势
- 机房气体消防系统设计重点
热门文章
- Apache Kafka-auto.offset.reset参数(earliest、latest、none)含义说明
- 鼠标回报率测试软件用哪个,揭开鼠标的秘密 艾尚教你如何测回报率
- 纯css实现3D立体六面体照片墙
- 整理苹果官网上iOS的各种辅助功能
- Cannot find current proxy: Set 'exposeProxy' property on Advised to 'true' to make it available.解决
- 部分PTA的入门习题以及题解
- [计算机视觉] 边缘检测Canny算法原理总结 以及 matlab代码实现
- Hadoop 的sbin/start-dfs.sh 启动 报错
- easyUI详解教程
- ui设计师必须了解的13中移动app界面设计的基础知识