当前位置:  技术问答>linux和unix

一个有关readdir函数的问题~~~

    来源: 互联网  发布时间:2016-09-09

    本文导语:  一个有关readdir函数的问题~~~ 网上查到,readdir的功能是读取下一个innode;那是不是意味着: 假如我用readdir读取目录的时候,其innode的值是递增||递减的? 但我发现实际结果并不是这样,innode的值并不是递增||...

一个有关readdir函数的问题~~~

网上查到,readdir的功能是读取下一个innode;那是不是意味着:
假如我用readdir读取目录的时候,其innode的值是递增||递减的?
但我发现实际结果并不是这样,innode的值并不是递增||递减的

代码:

void printdir(char* dir,int depth)
{
        DIR* str=opendir(dir);
        struct stat statbuf;
        struct dirent* entry;

        if(str==NULL){
                printf("the direction is not valid");
                return;
        }
        chdir(dir);
        while((entry=readdir(str))!=NULL){
                lstat(entry->d_name,&statbuf);
                if(S_ISDIR(statbuf.st_mode))
                {
                        if(strcmp(".",entry->d_name)==0||strcmp("..",entry->d_name)==0)
                                continue;
                        printf("%*s%s%s%d/n",depth," ",entry->d_name," ",entry->d_ino);
                        printdir(entry->d_name,depth+1);
                }
                else{
                        printf("%*s%s%s%dn",depth," ",entry->d_name," ",entry->d_ino);
                }
        }
        chdir("..");
        closedir(str);
}




遍历某个目录的结果:

share 262381/
   servicetypes 262443/
   locale 271272/
   applnk 262641/
   services 262640/
   config 262382/


可以看到,innode的值似乎没什么规律~~~~这是怎么回事?

|
是按照保存在硬盘上的位置来排序的,也就是entry->d_off
           struct dirent {
               ino_t          d_ino;       /* inode number */
               off_t          d_off;       /* offset to the next dirent */  // 就是这个               unsigned short d_reclen;    /* length of this record */
               unsigned char  d_type;      /* type of file */
               char           d_name[256]; /* filename */
           };

|
见内核 fs/inode.c 代码
ino_t iunique(struct super_block *sb, ino_t max_reserved)
{
        /*   
         * On a 32bit, non LFS stat() call, glibc will generate an EOVERFLOW
         * error if st_ino won't fit in target struct field. Use 32bit counter
         * here to attempt to avoid that.
         */
        static unsigned int counter;
        struct inode *inode;
        struct hlist_head *head;
        ino_t res; 

        spin_lock(&inode_lock);
        do { 
                if (counter > I_HASHBITS);
        return tmp & I_HASHMASK;
}


inode值的分配比较无序,几乎没有规律

|
新建文件时,分配inode是无序的,readdir读取时,顺序依赖于具体文件系统类型,
readdir内部调用了vfs_readdir,最终实现这个功能的是ext3_readdir(文件系统名_readdir),
inode不论递增递减,都不能保证

    
 
 

您可能感兴趣的文章:

  • 有关Java构造函数的问题之一——缺省性
  • 怎么查找有内核函数及其有关信息???
  • 有关函数隐藏的问题
  • 有关sin,con,tan函数的问题
  • 有关system函数打开网页的
  • 有关在makefile中使用shell函数的问题
  • linux下有这样的函数吗?有关系统时间
  • Linux编程:有关read()函数的问题
  • 有关system()这个函数
  • 有关 grep命令 之 函数查找时 屏蔽link的问题
  • 有关malloc函数的问题
  • linux/unix里的进程互斥问题 ,有关lockf()函数!
  • MYSQL中有关SUM字段按条件统计使用IF函数(case)问题
  • 这个问题和fclose()函数有关系么?
  • 有关Java构造函数的问题之三——继承性
  • 有关Java构造函数的问题之二——实例性
  • 还是有关fork的问题,fork在一个函数中调用,我被搞胡涂了
  • 有关线程的一些数据结构及函数求教。。
  • 有关时间函数gmtime()的问题?(急需,谢谢先!)
  • 请教有关 fork 和 sprintf 函数的问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 求教有关smartupload的问题,有关就给分!!
  • 有关在sco unix5.0.4下有关网卡设置的问题(非常急,高分相送)
  • 有关snmp的一个很菜,但是困扰了我很久的问题,有关工作原理的,望大家赐教
  • 有关ResultSet的问题,帮助解决问题者另外加分...
  • (菜鸟问题)有关目录中文件执行的问题???
  • 有关Qt下编译的环境问题
  • 有关裁减内核及shell命令的问题
  • 有关cocoon的问题??
  • Helper! 有关Jbuilder使用问题???
  • 有关swing的问题,请高手回答
  • 一个有关分数的问题
  • 有关pcmaclan的打印机共享问题
  • 请教有关samba共享名大小写的问题
  • 想看一下吗?有关swing 组件的问题?
  • 有关L的问题(菜鸟求教)???
  • 有关jsp服务器的一个问题
  • java 进阶级问题,有关网络的问题,请多多帮助
  • 有关Liunx 的最低配置问题
  • 有关环境的问题
  • 请教有关konqueror 问题?
  • ​有关Docker的八个令人难以置信的事实
  • 有关内码转换(跟HttpServletRequest有关)
  • 求有关png图像处理的libpng库的有关中文资料
  • 大家推荐一下有关LINUX7有关的网络编程的书。最好是比较全面的!比较经典的。
  • 有关KDevelop-3.0.4-0.1.i386.rpm的有关软件包
  • 有关KDevelop编程的资料
  • 有关集群与数据同步
  • 请教有关英文简历方面的词句!
  • 有关报表打印(在JAVA,WEB下应用)急用!
  • 请各位大哥告知JAVA中消息机制的有关资料,拜托!
  • 有关jbuilder


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3