3

我认为这将是一个简单的问题,但我找不到答案。我主要一直在阅读这些规格:

http://www.nongnu.org/ext2-doc/ext2.html

它似乎没有提到目录条目的名称是否应该以空值结尾。我认为它是未定义的。有一个 name_len 字段,因此无论如何您都可以轻松打印名称。

ext2 目录名称是否保证以空字符结尾?

我问是因为在我的爱好操作系统上测试我的 ext2 驱动程序时,我注意到当我打印一些目录名称时,最后会出现一些垃圾字符。如果我只是打印 name_len 个字符,一切都很好,尽管如果它是空终止的会很好。

谢谢!

4

1 回答 1

7

我知道这是一个老问题,但对于其他可能会发现这个问题的人来说:

不,它不能保证为空终止。事实上,只有当名称 (name_len) 的长度不是 4 的倍数时,它才应该以 null 结尾。

来自《了解 Linux 内核》,第 3 版:

...目录条目的长度始终是 4 的倍数,因此,如有必要,会在文件名末尾添加空字符 (\0) 以进行填充。name_len 字段存储实际的文件名长度

下面是一个例子(来自书中)。请注意,名称“sbin”没有空终止符,因为长度 (4) 是 4 的倍数:

在此处输入图像描述

于 2012-05-28T19:16:45.133 回答