首页 > 编程 > C > 正文

详解C语言中telldir()函数和seekdir()函数的用法

2020-01-26 14:54:57
字体:
来源:转载
供稿:网友

C语言telldir()函数:取得目录流的读取位置
头文件:

 #include <dirent.h>

定义函数:

off_t telldir(DIR *dir);

函数说明:telldir()返回参数dir 目录流目前的读取位置. 此返回值代表距离目录文件开头的偏移量返回值返回下个读取位置, 有错误发生时返回-1.

错误代码:EBADF 参数dir 为无效的目录流。

范例

#include <sys/types.h>#include <dirent.h>#include <unistd.h>main(){  DIR *dir;  struct dirent *ptr;  int offset;  dir = opendir("/etc/rc.d");  while((ptr = readdir(dir)) != NULL)  {    offset = telldir (dir);    printf("d_name : %s offset :%d/n", ptr->d_name, offset);  }  closedir(dir);}

执行结果:

d_name : . offset :12d_name : .. offset :24d_name : init.d offset 40d_name : rc0.d offset :56d_name : rc1.d offset :72d_name : rc2.d offset :88d_name : rc3.d offset :104d_name : rc4.d offset :120d_name : rc5.d offset :136d_name : rc6.d offset :152d_name : rc offset :164d_name : rc.local offset :180d_name : rc.sysinit offset :4096

C语言seekdir()函数:设置下回读取目录的位置
头文件:

#include <dirent.h>

定义函数:

void seekdir(DIR * dir, off_t offset);

函数说明:seekdir()用来设置参数dir 目录流目前的读取位置, 在调用readdir()时便从此新位置开始读取. 参数offset 代表距离目录文件开头的偏移量。

错误代码:EBADF 参数dir 为无效的目录流。

范例

#include <sys/types.h>#include <dirent.h>#include <unistd.h>main(){  DIR * dir;  struct dirent * ptr;  int offset, 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 : %s offset :%d /n", ptr->d_name, offset);  }  seekdir(dir offset_5);  printf("Readdir again!/n");  while((ptr = readdir(dir)) != NULL)  {    offset = telldir(dir);    printf("d_name : %s offset :%d/n", ptr->d_name, offset);  }  closedir(dir);}

执行:

d_name : . offset :12d_name : .. offset :24d_name : init.d offset 40d_name : rc0.d offset :56d_name : rc1.d offset :72d_name : rc2.d offset :88d_name : rc3.d offset :104d_name : rc4.d offset :120d_name : rc5.d offset :136d_name : rc6.d offset :152d_name : rc offset :164d_name : rc.local offset :180d_name : rc.sysinit offset :4096 readdir again!d_name : rc2.d offset :88d_name : rc3.d offset :104d_name : rc4.d offset :120d_name : rc5.d offset :136d_name : rc6.d offset :152d_name : rc offset :164d_name : rc.local offset :180d_name : rc.sysinit offset :4096

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选