详解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