zoukankan      html  css  js  c++  java
  • opendir函数和readdir函数内涵及用法

    工作中遇到奇怪的事,加载增量的时候加载不上。于是开始分析原因,log里边没有任何错误信息,只有加载完成的标志。增量的数据在目录里边是存在的,但是显示的目录大小却不是4096,而是17,不知道为什么。后来gdb调试,发现没有取到对应的增量的文件夹目录。而这是用一个函数GetChildDir()来实现的。这个函数里边调用了c的函数:opendir函数和readdir函数。于是开始研究这两个函数。

    ==================================

    1. 发现 linux 大部分的目录 都是4096(linux).

    一般情况下,HDD磁盘最小的管理单位是扇区(Sector,也叫Unit或者Block),扇区的大小是512Bytes,但Linux一次I/O是8个扇区即4096Bytes,因此Linux(准确的说是ext2/ext3等文件系统)存取文件的最小单位即使4096Bytes(=8个Blocks)(Windows的NTFS好像是1K即2个Blocks)。而 目录 是特殊文件,OS初始分配8个Blocks,且size也即是4096Bytes,这与普通文件(Regular file)不同,普通文件的size是给予文件内容计算的,但是实际占用的磁盘空间总是是4096的倍数。
    在linux的shell解释器中,输入这样的命令stat + 文件名即可获取文件的属性.
     
     

    2. opendir函数

    头文件:#include <sys/types.h>  #include <dirent.h>

    函数:DIR *opendir(const char *name);   [关于DIR介绍:http://blog.csdn.net/u012349696/article/details/50083787]

    含义: opendir()用来打开参数name 指定的目录, 并返回DIR*形态的目录流, 和open()类似, 接下来对目录的读取和搜索都要使用此返回值.



  • 相关阅读:
    delphi debug release区别是什么?
    Delphi异形窗口之PNG
    WebBrowser实现编辑网页
    父子窗体滚动条支持鼠标滚轮移动
    Com进程通信(Delphi2007)
    Android实例-Delphi开发蓝牙官方实例解析(XE10+小米2+小米5)
    教程-Close、Halt、terminate、ExitProcess的区别
    各国特种部队名称
    关于c#字典key不存在的测试
    关于scut使用WebService
  • 原文地址:https://www.cnblogs.com/simplepaul/p/10350232.html
Copyright © 2011-2022 走看看