lseek()的手册页显示:


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


在错误部分显示:


  EINVAL地点无效。或者:产生的文件偏移量将
  为负数,或超出可搜索设备的范围。


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

假设MTD已被打开并具有读写权限,那么当lseek()对于MTD来说是whence时,SEEK_SET在寻找过去的EOF时会如何响应?

最佳答案

不要混淆文件和设备概念。手册页非常清晰:您可以查找文件的末尾,但不要超出文件可以容纳的大小。

例如:您有一个128Mb设备,其中只有一个空文件。您可以打开文件并查找到 128Mb,因为随后的write()肯定会失败,并且在搜索时已经知道这一点。

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

关于c - 在MTD上超越EOF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59873625/

10-12 07:27