zoukankan      html  css  js  c++  java
  • STDIN_FILENO的作用及与stdin 的区别

    
    

    最近在学《UNIX高级环境编程》,遇到有关STDIN_FILENO的问题,在此总结一下。

    
    

    在UNIX一些系统调用中使用到STDIN_FILENO表示标准输入,STDOUT_FILENO表示标准输出,STDERR_FILENO表示标准出错,使用时需要加头文件<unistd.h>

    
    

    在UNIX下还有stdin,stdout,stderr表示同样的含义。


    1
    .STDIN_FILENO的作用 STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用。 操作系统一级提供的文件API都是以文件描述符来表示文件。STDIN_FILENO就是标准输入设备(一般是键盘)的文件描述符。 2.区别 1)数据类型不一致: stdin类型为 FILE* STDIN_FILENO类型为 int 使用stdin的函数主要有:fread、fwrite、fclose等,基本上都以f开头 使用STDIN_FILENO的函数有:read、write、close等 2)stdin等是FILE *类型,属于标准I/O,高级的输入输出函数。在<stdio.h>。 STDIN_FILENO等是文件描述符,是非负整数,一般定义为0, 1, 2,属于没有buffer的I/O,直接调用系统调用,在<unistd.h>3)STDIN_FILENO 是标准输入的文件描述符 详见/usr/include/unistd.h 代码: /* Standard file descriptors. */ #define STDIN_FILENO 0 /* Standard input. */ #define STDOUT_FILENO 1 /* Standard output. */ #define STDERR_FILENO 2 /* Standard error output. */ 4)层次不一样。STDIN 属于标准库处理的输入流,其声明为 FILE 型的,对应的函数前面都有f开头,如fopen/fread/fwrite/fclose 标准库调用等 STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用。 标准库内封装了系统 API 调用,如 fread 内部实现调用 read。 5)操作系统一级提供的文件API都是以文件描述符来表示文件。STDIN_FILENO就是标准输入设备(一般是键盘)的文件描述符。 6)曾经很纳闷,为什么一个整形fd(STDIN_FILENO=0)就可以代表一个打开的文件呢? 后来明白了,和我们的手机号是类似的,手机号只是一个9位数的整形,但是在移动通话网络里,它就可以用来区分不同的手机终端。 标准C++一级提供的文件操作函数库都是用FILE*来表示文件,stdin就是指向标准输入设备文件的FILE*。
    http://blog.csdn.net/yeyuangen/article/details/6781999
    http://blog.csdn.net/mjay1234/article/details/7357261
  • 相关阅读:
    Vue生命周期(转)
    Gulp的简单使用
    webpack的简单使用
    面试----手写正则表达式
    面试----你可以手写一个promise吗
    baidu.com跳转www.baidu.com
    php 操作时间、日期类函数
    php操作文件类的函数
    sphinx搜索 笔记
    bash下输入命令的几个常用快捷键
  • 原文地址:https://www.cnblogs.com/leijiangtao/p/4479085.html
Copyright © 2011-2022 走看看