Linux文件操作里神秘的当前指针
在《Unix/Linux编程实践教程》一书第56页有一段话: Unix每次打开一个文件都会保存一个指针来记录文件的当前位置,如图示 read从当前位置读入指定长度的数据, 然后移动当前位置指针, 指向下一个未读的数据 当从文件读数据时,内核从指针所标明的地方开始, 读取指定的字节,然后移动位置指针, 指向下一个未被读取的字节,写文件的操作也是类似的. 指针是与文件描述符相关联的,而不是与文件关联, 如果两个程序同时打开一个文件,这时会有两个指针, 两个程序对文件的读操作不会互相干扰.
要接开文件当前指针的面纱,定位它,有个方法: 使用off_t oldpos = lseek(int fd,off_t dist, int base)函数可以返回当前位置——lseek(fd, 0, SEEK_CUR),SEEK_CUR这个参数标明,在当前指针的位置做零位移,返回的同样是当前指针位置. 借书中的例子结合这个函数,查看文件打开时当前指针的移动动向: #include <stdio.h> 这段代码,原是读取utmp文件,该文件记录了用户登录详细信息,逐条读取utmp结构体大小的数据(utmp结构体成员包含登录信息),理论上来讲,每次read大小为utmp结构体的数据后后,当前指针都应该后移utmp结构体大小,那么查看一下结果是不是呢? view sourceprint?
|
|||||||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |