STDIN_FILENO和stdin
2024-08-25 02:49:03
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
最新文章
- HTML特殊符号汇总
- 每天一个linux命令(35):ln 命令
- 【BZOJ1002】【FJOI2007】轮状病毒(生成树计数)
- SourceTree - 正在检查源... When cloning a repository, ";Checking Source"; spins forever
- VC6.0读取Excel文件数据
- WebRTC的学习(一)
- 关于spring-mvc的InitBinder注解的参数
- C# winform 弹出输入框
- HDU 2008 数字统计
- FIR滤波器的实现方法(转)
- ABP学习笔记(1)-使用mysql
- Nintex Workflow Get Attachment link
- easyUI-datagrid带有工具栏和分页器的数据网格
- 简述synchronized和java.util.concurrent.locks.Lock的异同?
- ABBYY OCR技术教电脑阅读缅甸语(上)
- 生日蛋糕 POJ - 1190 搜索 数学
- html 之 td valign 和 align
- [UE4]用Blenspace混合空间动画代替AimOffset动画偏移
- source insight 相对路径新建工程
- Android 3.0开始引入fragments(碎片、片段)类