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
      
  • 相关阅读:
    [cf621E]Wet Shark and Blocks
    [学习笔记]数论
    [CZYZ2016]day8
    Python 对 Excel 操作用法详解
    HTML学记笔记
    Django 2.2_错误:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position 9737: illegal multibyte sequence
    Python在终端通过pip安装好包以后,在Pycharm中依然无法使用的解决办法
    div的移动特效
    jQuery各种动画效果
    jqZoom插件
  • 原文地址:https://www.cnblogs.com/zongzi10010/p/10539837.html
Copyright © 2011-2022 走看看