详解C语言中telldir()函数和seekdir()函数的用法
C语言telldir()函数:取得目录流的读取位置
头文件:
#include<dirent.h>
定义函数:
off_ttelldir(DIR*dir);
函数说明:telldir()返回参数dir目录流目前的读取位置.此返回值代表距离目录文件开头的偏移量返回值返回下个读取位置,有错误发生时返回-1.
错误代码:EBADF参数dir为无效的目录流。
范例
#include<sys/types.h> #include<dirent.h> #include<unistd.h> main() { DIR*dir; structdirent*ptr; intoffset; dir=opendir("/etc/rc.d"); while((ptr=readdir(dir))!=NULL) { offset=telldir(dir); printf("d_name:%soffset:%d\n",ptr->d_name,offset); } closedir(dir); }
执行结果:
d_name:.offset:12 d_name:..offset:24 d_name:init.doffset40 d_name:rc0.doffset:56 d_name:rc1.doffset:72 d_name:rc2.doffset:88 d_name:rc3.doffset:104 d_name:rc4.doffset:120 d_name:rc5.doffset:136 d_name:rc6.doffset:152 d_name:rcoffset:164 d_name:rc.localoffset:180 d_name:rc.sysinitoffset:4096
C语言seekdir()函数:设置下回读取目录的位置
头文件:
#include<dirent.h>
定义函数:
voidseekdir(DIR*dir,off_toffset);
函数说明:seekdir()用来设置参数dir目录流目前的读取位置,在调用readdir()时便从此新位置开始读取.参数offset代表距离目录文件开头的偏移量。
错误代码:EBADF参数dir为无效的目录流。
范例
#include<sys/types.h> #include<dirent.h> #include<unistd.h> main() { DIR*dir; structdirent*ptr; intoffset,offset_5,i=0; dir=opendir("/etc/rc.d"); while((ptr=readdir(dir))!=NULL) { offset=telldir(dir); if(++i==5) offset_5=offset; printf("d_name:%soffset:%d\n",ptr->d_name,offset); } seekdir(diroffset_5); printf("Readdiragain!\n"); while((ptr=readdir(dir))!=NULL) { offset=telldir(dir); printf("d_name:%soffset:%d\n",ptr->d_name,offset); } closedir(dir); }
执行:
d_name:.offset:12 d_name:..offset:24 d_name:init.doffset40 d_name:rc0.doffset:56 d_name:rc1.doffset:72 d_name:rc2.doffset:88 d_name:rc3.doffset:104 d_name:rc4.doffset:120 d_name:rc5.doffset:136 d_name:rc6.doffset:152 d_name:rcoffset:164 d_name:rc.localoffset:180 d_name:rc.sysinitoffset:4096readdiragain! d_name:rc2.doffset:88 d_name:rc3.doffset:104 d_name:rc4.doffset:120 d_name:rc5.doffset:136 d_name:rc6.doffset:152 d_name:rcoffset:164 d_name:rc.localoffset:180 d_name:rc.sysinitoffset:4096