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
      
  • 相关阅读:
    Leetcode 50.Pow(x,n) By Python
    Leetcode 347.前K个高频元素 By Python
    Leetcode 414.Fizz Buzz By Python
    Leetcode 237.删除链表中的节点 By Python
    Leetcode 20.有效的括号 By Python
    Leetcode 70.爬楼梯 By Python
    Leetcode 190.颠倒二进制位 By Python
    团体程序设计天梯赛 L1-034. 点赞
    Wannafly挑战赛9 C-列一列
    TZOJ Start
  • 原文地址:https://www.cnblogs.com/zongzi10010/p/10539837.html
Copyright © 2011-2022 走看看