繁体   English   中英

在 MTD 上寻求超出 EOF

[英]lseek beyond EOF on an MTD

lseek()的手册页说:

lseek() 允许将文件偏移设置为超出文件末尾(但这不会更改文件的大小)。 如果稍后写入数据,则后续读取间隙(“洞”)中的数据将返回空字节 ('\\0'),直到数据实际写入间隙。

在错误部分它说:

EINVAL无效。 或者:生成的文件偏移量将是负数,或者超出可查找设备的末尾。

我不确定如何解释lseek手册页,因为它没有提到 MTD。

假设MTD已经以读写权限打开,当 MTD 的SEEK_SETwhence时, lseek()在寻找过去的 EOF 时将如何响应?

不要混淆文件和设备概念。 手册页非常清楚:您可以搜索到文件末尾,但不会到文件变得比设备可以承载的大的程度。

示例:您有一个 128Mb 的设备,其中只有一个空文件。 您可以打开文件并查找小于 128Mb 的任何位置,因为随后的 write() 会使文件增大。 但是你肯定不能搜索 > 128Mb,因为后续的 write() 肯定会失败,这在搜索时就已经知道了。

现在,到 MTD 设备。 MTD 是一个抽象层,将(闪存)硬件设备映射到文件中。 鉴于此,文件公开了文件和设备的行为,就像一个文件大到它所指的设备一样大,因此越过文件末尾寻找就等于越过设备末尾寻找。 在这种情况下,我想到了另一个好奇心:如果我们尝试截断该文件怎么办? 我想已经知道答案了......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM