【问题标题】:sys/stat.h returning wrong sizesys/stat.h 返回错误的大小
【发布时间】:2013-03-18 20:26:24
【问题描述】:

我正在使用

  1. unistd.h
  2. sys/stat.h

而有趣的是st_size 大于read() 之后返回的值? st.st_size 返回644 - read() 返回606, 有什么想法吗?

【问题讨论】:

  • 文件描述符是否设置为非阻塞?该文件是普通磁盘文件,还是有什么特别之处。也显示一些代码。
  • read() 被允许读取并返回比请求更少的字节...

标签: c stat unistd.h


【解决方案1】:

文件大小和流大小可能不匹配。例如,当您以文本模式打开文件时,操作系统可以将多字节 EOL 序列转换为单个字符。这在 Windows 上通常是可见的,但如果你在 Linux 上有一个 Windows 文件,效果可能是一样的。

【讨论】:

    【解决方案2】:

    内存以多个块(st_blocks)的形式分配。您注意到的剩余字节是由于块对齐。

    如果您检查 st.st_blocks 的值,您会发现它是 644 的一个很好的除数,而不是 606。

    因此,如果您想知道数据占用的实际大小,请不要使用st_size

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多