zoukankan      html  css  js  c++  java
  • STDIN_FILENO与stdin区别(转)

    标准输入 (stdin)

    标准输入是指数据(通常是文件)走向程序。程序要求数据传输使用的运算。并非所有程序都要求输入。如dirls程序(显示一个目录中的文件名)运行时不用任何输入。

    除非重导向,输入预期由 键盘取得。

    标准输入的文件描述子为 0 (零)。POSIX <unistd.h> 定义是 STDIN_FILENO;相对应的 <stdio.h> 变量为 FILE* stdin ;类似地, <iostream> 变量为 std::cin 

    标准输出 (stdout)

    标准输入是指程序写输出数据的流。程序要求数据传输使用的运算。并非所有程序都要求输出。如mvren程序在成功完成时是沉默的。

    除非重导向,输入为 终端

    标准输出的文件描述子为 1 (一)。POSIX <unistd.h> 定义是 STDOUT_FILENO;相对应的 <stdio.h> 变量为 FILE* stdout;类似地, <iostream> 变量为 std::cout 

    标准错误输出 (stderr)

    标准错误输出是另一个输出流,典型用于程序输出错误消息或诊断。它是独立于标准输出的流且可以分别导向。通常目的地为终端。标准错误输出是另一输出流,用于输出错误消息或诊断。它独立于标准输出,且可以分别被重导。常见的目的则为启始这个程序的终端,即使其标准输出被重导亦如此。例如:一个管线中的程序的输出被重导到下一个程序,但错误消息仍然直接流向文字终端机。

    标准输出标准错误输出导到相同的目的,如文字终端,是可以(且正常)的。消息会以如同程序写入的顺序来出现,除非有用到缓冲。(例如,一个常见状况是,当标准错误流是未使用缓冲,但标准输出流是有使用的;在这情况下,如果标准输出的缓冲器还没满的话,较慢写到标准错误的文字可能会较早出现在终端。

    标准错误输出的文件描述子为 2 ;POSIX <unistd.h> 定义为 STDERR_FILENO;相对的 <stdio.h> 变量 FILE* stderr

    C++<iostream>

     标准头文件提供两个相关的变量: std::cerr 和 std::clog,前者用于无缓冲的而后者使用和其它 C++ 流相同的缓冲机制。

     

    主要区别:

    1、数据类型不一致

      stdin等类型为 FILE *
      STDIN_FILENO等类型为 int
    使用stdin的函数主要有:fread、fwrite、fclose等,基本上都以f开头
    使用STDIN_FILENO的函数有:read、write、close
     
    2、层次不一致
    stdin等属于标准I/O,高级的输入输出函数。在<stdio.h>。
    STDIN_FILENO等是文件描述符,是非负整数,一般定义为0, 1, 2,直接调用系统调用,在<unistd.h>。

     

    #define STDIN_FILENO 0

    #define STDOUT_FILENO 1

    #define STDERR_FILENO 2

    stdin等属于标准库处理的输入流,其声明为 FILE 型的,对应的函数前面都有f开头,如fopen/fread/fwrite/fclose 标准库调用等
    STDIN_FILENO等属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括open/read/write/close 等系统级调用。

    关系:


    对于stdin等可以使用fileno()函数(用来取得参数stream指定的文件流所使用的文件描述符)来取得该文件流对应的文件描述符
    fileno(stdin) = STDIN_FILENO = 0
    fileno(stdout) = STDOUT_FILENO = 1
    fileno(stderr) = STDERR_FILENO = 2
    -------------------------------------------------------------------------------------------------------------------------

     

    -------------------------------------------------------------------------------------------------------------------------

     

  • 相关阅读:
    HDU 4024 Dwarven Sniper’s hunting(数学公式 或者是二分)
    二分图最大匹配总结
    HDU 4022 Bombing (STL应用)
    HDU 1847 Good Luck in CET4 Everybody!(组合博弈)
    HDU 1556 Color the ball(树状数组)
    HDU 4023 Game(博弈)
    HDU 1406 完数(水题)
    HDU 4021 24 Puzzle
    Oracle 多表查询优化
    【编程之美】字符串移位包含的问题(续)
  • 原文地址:https://www.cnblogs.com/coversky/p/6971550.html
Copyright © 2011-2022 走看看