искать больше EOF на MTD - PullRequest
       27

искать больше EOF на MTD

0 голосов
/ 23 января 2020

Страница справочника для lseek() гласит:

lseek () позволяет установить смещение файла за пределы конца файла (но это не меняет размер файла). Если в этот момент данные записываются позже, последующее чтение данных в промежутке («дыра») возвращает нулевые байты ('\ 0') до тех пор, пока данные фактически не будут записаны в промежуток.

В разделе об ошибке написано:

EINVAL , поэтому недопустимо. Или: результирующее смещение файла будет отрицательным или за пределами конца доступного для поиска устройства.

Я не уверен, как интерпретировать справочную страницу lseek, поскольку она не упоминает MTD.

Если предположить, что MTD был открыт с правами на чтение и запись, как lseek() будет реагировать при поиске прошлого EOF, когда whence равно SEEK_SET для МПД?

1 Ответ

1 голос
/ 23 января 2020

Не смешивайте понятия файлов и устройств. Страница руководства совершенно ясна: вы можете искать за концом файла, но не до такой степени, что файл станет больше, чем то, что может разместить устройство.

Пример: у вас есть устройство на 128 МБ с только пустой файл в нем. Вы можете открыть файл и искать в любой позиции <128Mb, потому что последующая запись () приведет к росту файла. Но, конечно, вы не можете искать> 128Mb, потому что последующая запись () обязательно завершится неудачей, и это уже известно во время поиска.

Теперь, к устройству MTD. MTD - это уровень абстракции, который отображает (fla sh) аппаратное устройство в файл. Учитывая это, файл демонстрирует как поведение файла, так и устройства, что-то вроде файла, большого размера в точности как устройства, к которому он относится, следовательно, поиск за концом файла равняется поиску за концом устройства. В этом случае мне приходит в голову другое любопытство: что если мы попытаемся усечь этот файл? Я полагаю, что уже знаю ответ ...

...