STDIN_FILENO的作用及与stdin 的区别

9 篇文章 0 订阅
STDIN_FILENO的作用及与stdin 的区别 

原文地址http://blog.csdn.net/yeyuangen/article/details/6781999 

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就是标准输入设备(一般是键盘)的文件描述符。 

补充: 
1,linux进程终止时,内核会关闭该进程的所有打开文件描述符 
2,read,write的buffer大小对性能有影响,通常设置为文件系统的block_size大小。 
3,read函数每次指定的大小不一定能获取指定数量的数据 
4,write通过lseek写的空洞文件,通常不占用磁盘块,再具体写入的适合再分配(除非预先全部设置) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值