STDIN_FILENO和stdin
title: STDIN_FILENO和stdin
date: 2019/03/15 22:03:22
toc: true
STDIN_FILENO和stdin
引入
今天想写一个程序,使用串口非阻塞,然后使用fread
来从标准输入中读取,代码差不多是这样的
int main(int argc, char **argv)
{
char buf_read[100];
int num_read;
setvbuf(STDIN_FILENO, (char*)NULL, _IOFBF, 0);------这里应该是stdin
printf("%s %d\n",__FILE__,__LINE__) ;
fflush ( stdout ) ;
while (1)
{
num_read = fread(buf_read, 1, 1, STDIN_FILENO);------这里应该是stdin
if (num_read)
{
printf("%s %d\n",__FILE__,__LINE__) ;
fflush ( stdout ) ;
}
}
}
但是一直提示段错误,后来经过大神指点发现了应是stdin
而不是STDIN_FILENO
,其实网上的代码都是写的stdin
,只是自己没注意,觉得两个是一样的,其实仔细一看两个是完全不同结构的
总结
- stdin类型为 FILE*,
fread、fwrite、fclose
- STDIN_FILENO类型为 int,
read、write、close
typedef struct _iobuf
{
char* _ptr;
int _cnt;
char* _base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char* _tmpfname;
} FILE;
#define STDIN_FILENO 0
#define STDOUT_FILENO 1
#define STDERR_FILENO 2
输入流被称为
standard input
,输出流被称为 ``standard output错误流被称为
standard error。这些名词通常简写为符号,用于引用这些文件,它们是
stdin,
stdout, 和
stderr`.这些符号中,每一个都是 stdio(3) 中的一个宏,类型是指向 FILE 的指针,可以用于类似 fprintf(3) 或 fread(3) 等函数中
与流关联的整数形式的文件描述符分别是 0,1 还有 2。预处理器符号
STDIN_FILENO,STDOUT_FILENO STDERR_FILENO
分别以它们为值.转换
fileno(stdin) = STDIN_FILENO = 0
fileno(stdout) = STDOUT_FILENO = 1
fileno(stderr) = STDERR_FILENO = 2
STDIN_FILENO和stdin的更多相关文章
- STDIN_FILENO vs stdin
数据类型不一致:stdin类型为 FILE*STDIN_FILENO类型为 int 使用stdin的函数主要有:fread.fwrite.fclose等,基本上都以f开头使用STDIN_FILENO的 ...
- stdin和STDIN_FILENO的区别
STDIN_FILENO与stdin的区别: STDIN_FILENO: 1).数据类型:int 2).层次:系统级的API,是一个文件句柄,定义在<unistd.h>中. 3).相应的函 ...
- [apue] 书中关于伪终端的一个纰漏
在看 apue 第 19 章伪终端第 6 节使用 pty 程序时,发现“检查长时间运行程序的输出”这一部分内容的实际运行结果,与书上所说有出入. 于是展开一番研究,最终发现是书上讲的有问题,现在摘出来 ...
- Linux C 文件IO
文件IO 2021-05-31 12:46:14 星期一 目录 文件IO 基础IO open 错误 creat read 一个例子 write close lseek 文件空洞 unlink删除 io ...
- STDIN_FILENO的作用及与stdin 的区别
1.STDIN_FILENO的作用 STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用 ...
- stdin,stdout 和 STDOUT_FILENO,STDIN_FILENO
stdin,stdout 等类型为 FILE *. STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO 等类型为 int. 使用 FILE * 的函数主要有:fopen. ...
- STDIN_FILENO
1.STDIN_FILENO的作用STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用. ...
- stdin stdout stderr - 标准 I/O 流
Fd #include <stdio.h> Fd extern FILE *stdin; Fd extern FILE *stdout; Fd extern FILE *stderr; D ...
- 刨根问底系列(2)——stdin、stdout、FILE结构体、缓冲区和fflush的理解
stdin.stdout.FILE结构体.缓冲区和fflush理解 因为之前调试代码时, printf输出的字符串总是被截断了输出(先输出部分, 再输出剩余的), 当时调试了很久, 才知道问题所在, ...
随机推荐
- deepin linux学习笔记
目录 deepin linux学习笔记 前言 linux常用命令 ls 显示文件夹内容 cd 切换当前目录 pwd 查看当前工作目录 mkdir 新建文件夹 rm 删除文件或文件夹 mv 移动文件 c ...
- iOS:我的学习路径
1.复习C语言(半个月) <C Primer Plus>1-6章 2.学习Objective-C基础语法(一周) 黑马程序员视频 3.直接用Xcode开始APP的实战(半个月) 黑马程序员 ...
- 【English】十一、一般疑问句
一.一般疑问句定义 参考:英语语法中的一般疑问句和特殊疑问句的区别 英语一般疑问句句型结构 能用yes / no(或相当于yes / no)回答的问句. 二.一般疑问句的句子结构,三种 be动词: ...
- js实现自定义修改网页中表格信息
项目中的打印页面,为提高用户体验,需要增自定修改表格内容的功能,以下是使用示意图(双击td标签部分的内容,可自定义修改): 以下是js插件源码,存为edit.js文件: var tbl, tbt; v ...
- djangorestframework+vue-cli+axios,为axios添加token作为headers踩坑记
情况是这样的,项目用的restful规范,后端用的django+djangorestframework,前端用的vue-cli框架+webpack,前端与后端交互用的axios,然后再用户登录之后,a ...
- 迁移FRS至DFSR SYSVOL
截至2017年6月20日,Windows 2016 RS1系统为最后一版支持FRS,后续版本将不再包含该功能,详细见 https://support.microsoft.com/en-us/help/ ...
- docker-compose的安装和卸载
使用docker-compose 可以轻松.高效的管理容器,它是一个用于定义和运行多容器 docker 的应用程序工具. 原文地址:代码汇个人博客 http://www.codehui.net/inf ...
- timers模块
timers模块 var timers = require('timers'); function A() { //将A对象注册到定时器里 timers.enroll(); //进行激活,如果不激活, ...
- C#,WPF中使用多文本显示数据,并对其数据进行关键字高亮等操作
需求:针对多文本信息显示,我们需要对其内容中的某些关键字或者某行进行高亮显示,并用不同颜色显示. 分析:在C#中,首先要进行多文本信息显示,可以RichTextBox(不要使用TextBox)控件,该 ...
- [转帖]""(双引号) 与''(单引号) 差在哪?
""(双引号) 与''(单引号) 差在哪? http://wiki.jikexueyuan.com/project/13-questions-of-shell/double-sin ...