每个进程在PCB(Process Control Block)中都保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针,现在我们明确一下:已打开的文件在内核中用file结构体表示,文件描述符表中的指针指向file结构体。
分类:
其他好文 时间:
2015-08-30 21:05:42
阅读次数:
131
FILE结构体用来记录文件相关的信息FILE结构体类型的指针变量叫做文件指针。fopen函数可以打开一个文件并制作对应的FILE结构体变量,把结构体变量的地址作为返回值使用。如果执行失败则返回NULL。 1 /* 2 文件练习 3 */ 4 #include 5 int main() { 6...
分类:
其他好文 时间:
2015-08-19 07:04:28
阅读次数:
162
文件描述符、文件描述符表、打开文件表、目录项、索引节点之间的联系如下图所示: 每个进程在PCB(Process Control Block)中都保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针,已打开的文件在内核中用file结构体表示,文件描述符表中的指针指....
分类:
其他好文 时间:
2015-07-01 23:39:29
阅读次数:
285
file结构体并不与实际的文件一一对应,例如,当一个进程多次打开同一文件的时候,都会分配一个不同的file结构体以及相应的文件描述符,尽管这些file结构体最终都指向同一个实际物理文件。可以看出,内存中的文件和磁盘中的文件实现方式还是不太一样的,内存中的文件是动态的,因为要不停的读写,所以只是一份拷贝,所有的操作针对的只是这份拷贝,操作完成后,把结果写回到磁盘文件中;写回这个动作执行之前,所有的改动只存在与内存中,并...
分类:
系统相关 时间:
2015-05-31 06:47:58
阅读次数:
216
.....昨天我们讨论了标准 IO,今天主要说说系统 IO。1.文件描述符在 SYSIO 中贯穿了一个整形数,它就是文件描述符。对内核而言,所有打开的文件都是通过文件描述符引用的。它的作用与 STDIO 中的 FILE 结构体类似,但是它们的工作原理是完全不同的。它实际上是一个由内核保存的数组下标,...
分类:
其他好文 时间:
2015-04-16 01:00:48
阅读次数:
182
关于C中I/O缓冲区的解释C标准库的I/O缓冲区用户程序调用C标准I/O库函数读写文件或设备,而这些库函数要通过系统调用把读写请求传给内核,最终由内核驱动磁盘或设备完成I/O操作。C标准库为每个打开的文件分配一个I/O缓冲区以加速读写操作,通过文件的FILE结构体可以找到这个缓冲区,用户调用读写函数...
分类:
其他好文 时间:
2014-10-30 15:09:50
阅读次数:
172
1dup函数和dup2函数
#include
int dup(intoldfd);
int dup2(intoldfd, int newfd);
dup和dup2都可用来复制一个现存的文件描述符,使两个文件描述符指向同一个file结构体。如果两个文件描述符指向同一个file结构体,File
Status Flag和读写位置只保存一份在file结构体...
分类:
系统相关 时间:
2014-09-16 00:23:49
阅读次数:
254
用户程序调用C标准I/O库函数读写文件或设备,而这些库函数要通过系统调用把读写请求传给内核,最终由内核驱动磁盘或设备完成I/O操作。C标准库为每个打开的文件分配一个I/O缓冲区以加速读写操作,通过文件的FILE结构体可以找到这个缓冲区,用户调用读写函数大多数时候都在I/O缓冲区中读写,只有少数时候需...
分类:
其他好文 时间:
2014-07-09 14:18:46
阅读次数:
211
read属于系统调用,它的缓存是基于内核的缓冲,是记在内核空间的. 而fgetc是标准函数, 是在用户空间I/O缓冲区的比如用fgetc读一个字节,fgetc有可能从内核中预读1024个字节到I/O缓冲区中,再返回第一个字节,这时该文件在内核中记录的读写位置是1024,而在FILE结构体中记录的读写...
分类:
其他好文 时间:
2014-07-09 13:43:13
阅读次数:
282