LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 976|回复: 4

奇怪的循环

[复制链接]
发表于 2008-3-25 08:29:34 | 显示全部楼层 |阅读模式
看到一个程序遍目录并打印出来是这样写的
.....
while((dtr=readdir(dir))!=NULL){
        printf("filename or directory: %s\n",drt->d_name);
        }
......
请问这个循环怎么没有指向下一条的语句,他是怎么使循环趋向结束?
谢谢!
发表于 2008-3-25 08:43:40 | 显示全部楼层
readir 会遍历 dir 的 当到达最后的时候 会返回 NULL
回复 支持 反对

使用道具 举报

发表于 2008-3-25 08:45:20 | 显示全部楼层
  1. dtr=readdir(dir)
复制代码

readdir(DIR) 会搜寻下一个目录
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-25 09:04:26 | 显示全部楼层

谢谢!

readdir()这个函数里面是怎么实现自动指向下一条的?如果我想看它的具体实现我该怎么去找它的源代码?
回复 支持 反对

使用道具 举报

发表于 2008-3-26 01:15:16 | 显示全部楼层
Post by 紫衣伯爵;1830563
readdir()这个函数里面是怎么实现自动指向下一条的?如果我想看它的具体实现我该怎么去找它的源代码?


简单的实现可以这样:

  1. struct dir_t{
  2.       void * current;
  3.       void * end;
  4.       void * others;
  5. };

  6. void *readdir(dir_t * dir)
  7. {
  8.      if(dir->current ==  dir->end){
  9.               return NULL;
  10.      }else{
  11.               dir->current = next_entry;
  12.               return next_entry;
  13.      }
  14. }
复制代码


没看过mkdir的源代码(它的代码应该在Linux内核中),或者说这段代码其实跟readdir无关,只是给你演示一下怎么实现自动指向下一条。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表