Во-первых, в вашем коде есть проблема.
- Удалите
open()
и write()
перед циклом, они ничего не делают.
- Переместите два вызова
close()
сразу после вызова write()
.
Это обеспечит запись данных и закрытие файла, прежде чем вы посмотрите время его изменения с помощью ls. В противном случае между записью () и закрытием () будет задержка в 1 секунду. Поскольку вы пишете только 5 байтов, он будет помещен в буфер. Поэтому, когда вы проверяете время после вызова write (), у вас нет гарантии того, что данные еще были записаны, поэтому файл, возможно, не был изменен, что может испортить результаты.
Во-вторых, вы не можете предполагать задержку в 1 секунду, потому что time()
и ls
сообщают о разнице в 1 секунду. Поскольку секунда - это ваша самая маленькая единица, вы должны ожидать разницу округления. А поскольку вы используете два разных метода для получения количества секунд с начала эпохи, они могут использовать разные правила округления, что легко приведет к разнице в 1 секунду. Если добавить к этому файловую систему, в которой хранится время модификации, у вас фактически есть три разных участника, которые могут повлиять на ваши результаты.
Кроме того, если вы посмотрите правильно на свой результат, вы увидите, что это time()
, который указывает на одну секунду позже ls
. Таким образом, у вас совсем нет задержки, вы возвращаетесь во времени! Разница округления является наиболее вероятной причиной этого.
Итак, в функции time () Linux или вызовах ОС Linux нет ошибок.