您的位置:首页 > 编程语言

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

2014-10-05 20:14 363 查看
文件描述符(就是整数)用于在一个进程内唯一的标识打开的文件。这假定了内核能够在用户进程的描述符和内核内部使用的机构之间,建立一种关联。(深入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系统调用的次数,这样可以减少用户态与核心态切换的开销。

所以我认为,流就是对文件描述符和缓冲的一个封装。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux内核