首页 理论教育文件描述符和处理技巧

文件描述符和处理技巧

【摘要】:这个文件表的下标就称之为文件描述符,将这个文件描述符存储在一个数组中des[3]={0,1,2},那么,在进程中就可以通过这个des数组下标引用文件表项。也就是说,通过文件描述符就可以访问到这磁盘文件。

1.文件描述符

文件描述符就是进程与打开的文件的一个桥梁,通过这个桥梁,才可以在进程中对这个文件进行读写等操作。在Linux环境下,每打开一个磁盘文件,都会在内核中建立一个文件表项,文件表项中存储着文件的状态信息、存储文件内容的缓冲区和当前文件的读写位置。如果同一个磁盘文件打开了3次,就会创建3个这样的文件表项(a、b和c),读写该文件时,只会改变该文件表项中的文件读写位置,这3个文件表项存储在一个文件表数组table[3]中,在这里table[0]=a,table[1]=b,table[2]=c。这个文件表的下标就称之为文件描述符,将这个文件描述符存储在一个数组中des[3]={0,1,2},那么,在进程中就可以通过这个des数组下标引用文件表项。也就是说,通过文件描述符就可以访问到这磁盘文件。

2.数据流

从数据操作方式这个角度来说,Linux系统中的文件(无论是普通文件还是设备文件)可以看作是数据流。对文件进行操作之前必须先调用标准I/O库函数fopen()将数据流打开。打开数据流之后,就可以对数据流进行输入输出的操作。

标准I/O库函数是C语言中所特有的用于高级接口的函数,这些库函数存放在C语言的stdio.h头文件中,因此这些用于数据流的I/O操作函数不仅适用于Linux系统,还适用于其他的操作系统,由此可见,此库函数的应用大大增加了程序的移植性。(www.chuimin.cn)

要对数据流进行读写操作时,需要标准I/O库函数和FILE类型的文件指针一起来实现。这个文件指针是打开流时返回的指针,该指针用来表示要操作的数据流。

当执行程序时,有3个数据流不需要特定的函数进行打开的操作,它们会自动打开,这3个流是标准输入、标准输出和标准错误输出。这3个数据流是自动打开的,当不使用时,也会自动关闭。

然而调用标准I/O库函数fopen()打开的数据流,在对流进行操作后,需要调用函数fclose()将其关闭,fclose()函数在关闭数据流之前,会清空在操作过程中分配的缓冲区,并且会保存数据信息。