详解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++中的多态与文件操作

    多态是面向对象编程(OOP)的核心概念之一,它允许对象在相同操作下表现出不同的行为,本文主要为大家介绍了C++中多态与文件操作的相关知识,希望对大家有所帮助
    2024-04-04
  • C++如何获取本机的IP地址

    C++如何获取本机的IP地址

    这篇文章主要为大家详细介绍了C++如何获取本机IP地址小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • c++与python实现二分查找的原理及实现

    c++与python实现二分查找的原理及实现

    本文介绍了c++与python实现二分查找的原理及实现,二分查找指首先将数组中间值和目标值进行比较,如果相等则返回;如果不相等,则选择中间值左边的一半或者右边的一半进行比较;不断重复直到检索完毕,下文相关资料需要的朋友可以参考一下
    2022-03-03
  • C语言使用openSSL库DES模块实现加密功能详解

    C语言使用openSSL库DES模块实现加密功能详解

    这篇文章主要介绍了C语言使用openSSL库DES模块实现加密功能,简单讲解了DES加密的相关概念,并结合实例形式分析了DES加密的具体实现技巧,需要的朋友可以参考下
    2017-05-05
  • C++特性:迭代器

    C++特性:迭代器

    这篇文章主要介绍了C++特性:迭代器,本文主要通过介绍迭代器,迭代器和指针的区别,容器迭代器的使用等方面,需要的朋友可以参考下
    2021-06-06
  • C++实现哈夫曼树算法

    C++实现哈夫曼树算法

    这篇文章主要为大家详细介绍了C++实现哈夫曼树的具体代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • 浅谈C语言的字节对齐 #pragma pack(n)2

    浅谈C语言的字节对齐 #pragma pack(n)2

    下面小编就为大家带来一篇浅谈C语言的字节对齐 #pragma pack(n)2。小编觉得挺不错的现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 图文详解c/c++中的多级指针与多维数组

    图文详解c/c++中的多级指针与多维数组

    多维数组与多级指针是初学者经常感觉迷糊的一个地方。超过二维的数组和超过二级的指针其实并不多用。但只要掌握一定的方法,理解多级指针和“多维”数组完全可以像理解一级指针和一维数组那样简单。
    2016-08-08
  • C语言指针如何实现字符串逆序反转

    C语言指针如何实现字符串逆序反转

    这篇文章主要介绍了C语言指针如何实现字符串逆序反转,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • C语言中输出空格的五种方法

    C语言中输出空格的五种方法

    在C语言中,输出空格可以通过使用 printf 函数来实现,可以直接在字符串中包含空格,或者使用转义字符来控制格式,本文给大家介绍了几种常见的输出空格的方法,需要的朋友可以参考下
    2024-08-08

最新评论