(学习unix编程)关于文件流与文件描述符的区别

文件描述符(就是整数)用于在一个进程内唯一的标识打开的文件。这假定了内核能够在用户进程的描述符和内核内部使用的机构之间,建立一种关联。(深入linux内核架构)

由于唯一标识进程的结构就是PCB(文件控制块),那么文件描述符肯定在进程控制块当中。这个进程控制块在linux系统中叫做task_struct。

struct task_struct
{
       ...
       struct  files_struct *files; //打开文件信息
       ...
}
task_struct 中的 files_struct 就是进程开打文件的信息

files_struct
{
    ...
    struct file *fd_array[NR_OPEN_DEFAULT];// NR_OPEN_DEFAULT是内核允许每个进程打开的文件数。
    ...
}
其中fd_array每个数组项指向一个file结构的实例,管理一个打开文件的打开信息。

那么fd_array的下标就被称为文件描述符。


文件流(iostream)被实现为指向结构FILE的指针(linux程序设计),属于标准I/O库。

文件流的优势是提供了缓冲,减少了使用read和write系统调用的次数,这样可以减少用户态与核心态切换的开销。

所以我认为,流就是对文件描述符和缓冲的一个封装。




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值