как смещение файла read () или write () изменяется, когда файл обрезается до нуля другими людьми - PullRequest
1 голос
/ 31 марта 2020

Автоматическое смещение файла c изменено на 0 или осталось без изменений.

Если смещение файла остается неизменным, что происходит, когда read() или write() после truncate().

Ответы [ 2 ]

3 голосов
/ 31 марта 2020

как смещение файла read () или write () изменяется при усечении файла

Смещение файла открытых дескрипторов файла остается неизменным [1] .

что происходит, когда read () или write () после truncate ().

read():

  • Будет читать действительные данные если смещение находится в диапазоне файла.
  • Будет считывать байты равными 0, если смещение следует после длины файла, но в диапазоне усечения [1] .
  • Возвращает 0 (ie. Байт не читается), если смещение превышает конец файла [3] .

write():

  • Запишет данные в файл с указанным смещением [4] .
  • Если запись идет после конца файла, размер файла будет изменен с дополняющие нули [2] .

[1] с усечение posix :

Если файл ранее был больше длины, лишние данные отбрасываются. Если файл ранее был короче длины, его размер увеличивается, а расширенная область выглядит так, как будто она заполнена нулями.

Функция truncate () не должна изменять смещение файла для любых связанных описаний открытых файлов. с файлом.

[2] From posix lseek :

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

[3] С posix read :

Передача данных после текущего конца файла не производится. Если начальная позиция находится в конце или после конца файла, возвращается 0.

[4] И из posix write :

После успешного завершения записи () в обычный файл :

  • Любое успешное чтение () из каждой позиции байта: в файле, который был изменен этой записью, должен возвращать данные, указанные в записи () для этой позиции, до тех пор, пока такие позиции байта не будут снова изменены.
0 голосов
/ 31 марта 2020

То же самое, когда вы пытаетесь опубликовать конец файла - запись расширяет его, а чтение не удается. Поскольку операционные системы и файловые системы являются наиболее несовместимым программным обеспечением в мире, ни один ответ не избавит вас от попытки его опробовать.

...