【问题标题】:Are ext2 directory entry names guaranteed to be null-terminated on a valid file system?ext2 目录条目名称是否保证在有效文件系统上以空结尾?
【发布时间】:2011-11-30 17:24:14
【问题描述】:
我认为这将是一个简单的问题,但我找不到答案。我主要一直在阅读这些规范:
http://www.nongnu.org/ext2-doc/ext2.html
似乎没有提到目录条目的名称是否应该以空值结尾。我认为它是未定义的。有一个 name_len 字段,所以无论如何您都可以轻松打印名称。
ext2 目录名是否保证以空字符结尾?
我问是因为在我的爱好操作系统上测试我的 ext2 驱动程序时,我注意到当我打印一些目录名称时,最后出现了一些垃圾字符。如果我只是打印 name_len 个字符,一切都很好,但如果它是空终止的会很好。
谢谢!
【问题讨论】:
标签:
filesystems
ext2
hobby-os
【解决方案1】:
我知道这是一个老问题,但对于其他可能会发现这个问题的人:
不,不能保证它是空终止的。实际上,只有在名称 (name_len) 的长度不是 4 的倍数时才应该以 null 结尾。
来自《了解 Linux 内核》,第 3 版:
... 目录条目的长度始终是 4 的倍数,因此,如有必要,在文件名末尾添加空字符 (\0) 用于填充。 name_len 字段存储实际的文件名长度
下面有一个例子(来自书中)。请注意,名称“sbin”没有空终止符,因为长度 (4) 是 4 的倍数: