我认为这是一个简单的问题,但我找不到答案。我主要是阅读这些规格:
http://www.nongnu.org/ext2-doc/ext2.html
似乎没有提到目录条目的名称是否应该以空值终止。我认为这是未定义的。有一个name_len字段,因此您可以轻松打印该名称。
ext2目录名是否保证以空值终止?
我问,因为在我的业余爱好操作系统上测试我的ext2驱动程序时,我注意到当我打印一些目录名时,最后会出现一些垃圾字符。如果我只是打印name_len字符,一切都很好,虽然它是好的,如果它是空终止的。
谢谢!
答案 0 :(得分:5)
我知道这是一个老问题,但对于其他可能会发现这个问题的人来说:
不,不保证无效终止。实际上,如果名称(name_len)的长度不是4的倍数,它应该仅为空终止。
从了解Linux内核,第3版:
...目录条目的长度始终是4的倍数,因此,如果需要,在文件名末尾添加空字符(\ 0)以填充。 name_len字段存储实际的文件名长度
下面的例子(来自书中)。请注意,名称“sbin”没有空终止,因为length(4)是4的倍数: