Странное поведение при поиске файлов
Что касается двух взаимодействий, приведенных ниже, я ожидаю, что оба файла будут выводить один и тот же файл, но второе будет записано в конце файла. Разница лишь в том, что оператор read после записи не понимает, что происходит. Что мне не хватает?
Ожидаемое поведение:
>>> f = open("test.txt","w+")
>>> f.write('0123456789')
10
>>> f.seek(0)
0
>>> f.read(3)
'012'
>>> f.seek(0,1)
3
>>> f.write('XX')
2
>>> f.seek(0)
0
>>> f.read()
'012XX56789'
>>> f.close()
Неожиданное поведение:
>>> f = open("test.txt","w+")
>>> f.write('0123456789')
10
>>> f.seek(0)
0
>>> f.read(3)
'012'
>>> f.seek(0,1)
3
>>> f.write('XX')
2
>>> f.read(2)
'34'
>>> f.seek(0)
0
>>> f.read()
'0123456789XX'
>>> f.close()
Как вы можете видеть, XX
был написан после всей строки, когда я был на позиции 3, когда писал эти символы.
Ответы
Ответ 1
Случилось так, что write
был буферизован, а промежуточный read
продвинул позицию основного файла до конца файла (с момента его небольшого размера) до того, как запись была зафиксирована (очищена). Если то, что следует за записью, является seek
, буфер записи фиксируется (в нужном месте) перед фактическим поиском. Этот подход позволяет избежать накладных расходов при каждом чтении для проверки ожидающих записей и долгое время был определен POSIX.