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

 更新时间:2015年09月01日 17:20:04   投稿:goldensun  
这篇文章主要介绍了详解C语言中telldir()函数和seekdir()函数的用法,是C语言入门学习中的基础知识,需要的朋友可以参考下

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 :12
d_name : .. offset :24
d_name : init.d offset 40
d_name : rc0.d offset :56
d_name : rc1.d offset :72
d_name : rc2.d offset :88
d_name : rc3.d offset :104
d_name : rc4.d offset :120
d_name : rc5.d offset :136
d_name : rc6.d offset :152
d_name : rc offset :164
d_name : rc.local offset :180
d_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 :12
d_name : .. offset :24
d_name : init.d offset 40
d_name : rc0.d offset :56
d_name : rc1.d offset :72
d_name : rc2.d offset :88
d_name : rc3.d offset :104
d_name : rc4.d offset :120
d_name : rc5.d offset :136
d_name : rc6.d offset :152
d_name : rc offset :164
d_name : rc.local offset :180
d_name : rc.sysinit offset :4096 readdir again!
d_name : rc2.d offset :88
d_name : rc3.d offset :104
d_name : rc4.d offset :120
d_name : rc5.d offset :136
d_name : rc6.d offset :152
d_name : rc offset :164
d_name : rc.local offset :180
d_name : rc.sysinit offset :4096

相关文章

  • 详解C语言的预处理效果

    详解C语言的预处理效果

    这篇文章主要为大家介绍了C语言的预处理效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • 深入解读C语言中的符号常量EOF

    深入解读C语言中的符号常量EOF

    这篇文章主要介绍了C语言中的符号常量EOF,文中还介绍了EOF的验证和打印方法,需要的朋友可以参考下
    2015-11-11
  • C语言判断一个数是否是2的幂次方或4的幂次方

    C语言判断一个数是否是2的幂次方或4的幂次方

    本文中我们来看一下如何用C语言判断一个数是否是2的幂次方或4的幂次方的方法,并且判断出来是多少次方,需要的朋友可以参考下
    2016-06-06
  • C语言实现五子棋功能全解析

    C语言实现五子棋功能全解析

    五子棋是经典的棋牌类游戏,很多人都玩过,那么如何用Python实现五子棋呢,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • C语言实现简单计算器功能(1)

    C语言实现简单计算器功能(1)

    这篇文章主要为大家详细介绍了C语言实现简单计算器功能的第一部分,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • C++预定义的流对象基本示例详解

    C++预定义的流对象基本示例详解

    这篇文章主要为大家介绍了C++预定义的流对象基本示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 记录一个C++在条件查询时遇到的问题(推荐)

    记录一个C++在条件查询时遇到的问题(推荐)

    这篇文章主要介绍了记录一个C++在条件查询时遇到的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • C/C++ - 从代码到可执行程序的过程详解

    C/C++ - 从代码到可执行程序的过程详解

    这篇文章主要介绍了C/C++ - 从代码到可执行程序的过程,主要有预编译和编译,汇编链接,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • C语言中scanf函数与空格回车的用法说明

    C语言中scanf函数与空格回车的用法说明

    这篇文章主要介绍了C语言中scanf函数与空格回车的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Matlab实现获取文件夹下所有指定后缀的文件

    Matlab实现获取文件夹下所有指定后缀的文件

    这篇文章主要为大家详细介绍了Matlab如何获取文件夹下所有指定后缀的文件(包含子文件夹),文中的示例代码讲解详细,感兴趣的可以尝试一下
    2022-11-11

最新评论