代码之家  ›  专栏  ›  技术社区  ›  roeegg

用于存储linux结构superblock块大小的类型`

  •  1
  • roeegg  · 技术社区  · 2 年前
    struct super_block {
        struct list_head    s_list;        /* Keep this first */
        dev_t            s_dev;        /* search index; _not_ kdev_t */
        unsigned char        s_blocksize_bits;
        unsigned long        s_blocksize;
        ...
    

    从我读到的, s_blocksize s_blocksize_bits 分别以字节和比特为单位包含块的大小。 比特数大于字节数,所以如果它们的类型相反,不是更有意义吗?这样地:

        unsigned char        s_blocksize_bits;
        unsigned long        s_blocksize;
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   Barmar    2 年前

    s_blocksize_bits 不是块的大小(以比特为单位)。这是块大小中的比特数。如果你搜索代码看看它是如何使用的,它通常是位移的, e.g.

                elen = (etype << 30) |
                        (elen +
                        (count << sb->s_blocksize_bits));
    

    因此,给定一个块号,你将其移动这么多比特以获得相应的偏移量(他们假设块的大小总是2的幂)。