zoukankan      html  css  js  c++  java
  • STDIN_FILENO和stdin


    title: STDIN_FILENO和stdin
    date: 2019/03/15 22:03:22
    toc: true

    STDIN_FILENO和stdin

    https://blog.csdn.net/yeyuangen/article/details/6781999

    引入

    今天想写一个程序,使用串口非阻塞,然后使用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
    ",__FILE__,__LINE__) ;
        fflush ( stdout ) ;
        while (1)
        {
             num_read = fread(buf_read, 1, 1, STDIN_FILENO);------这里应该是stdin
            if (num_read)
            {
                printf("%s %d
    ",__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
      
  • 相关阅读:
    Robot Framework--06 用户关键字User Keyword
    Robot Framework--05 案例设计之流程与数据分离
    Robot Framework--04 工作区
    Robot Framework--03 案例及资源区
    Robot Framework--02 菜单栏&工具栏
    Robot Framework--01 创建简单工程示例
    uoj#35 后缀排序(后缀数组模版)
    【学习笔记】动态树Link-Cut-Tree
    【随意学学】三分法
    【学习笔记】dsu on tree
  • 原文地址:https://www.cnblogs.com/zongzi10010/p/10539837.html
Copyright © 2011-2022 走看看