Можете ли вы прочитать обновленное время mtime, но при чтении содержимого, которое еще не обновлено?

Только что разобрались с проблемой.

Когда вы предоставляете привилегии не от пользователя root , а от другого пользователя, вам необходимо указать пользователя в команде sudo .

См. Пример ниже:

Эта команда выполняется cat , и она работает.

sudo -u dog vim /home/dog/test.txt
3
11.03.2017, 01:07
2 ответа

Зависит от того, какая детализация вам нужна. Одиночные вызовы write() должны быть атомарными (*). Но если приложение выполняет несколько вызовов записи как часть одной логической операции, другой процесс может проснуться в середине, чтобы прочитать только часть.

*) Системный вызов может вернуться после записи только части данных, это будет указано в возвращаемом значении. Но я не знаю, может ли такое произойти с локальными файлами в Linux.

Рассмотрим такую последовательность:

--task 1--                  --task 2--
write()                     ..  
..                          stat()
..                          read()
write()                        

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

1
27.01.2020, 21:18

POSIX требует, чтобы чтение -после -запись ()всегда возвращало правильные данные в соответствии сhttp://pubs.opengroup.org/onlinepubs/007908799/xsh/write.html:

After a write() to a regular file has successfully returned:

  • Any successful read() from each byte position in the file that was modified by that write will return the data specified by the write() for that position until such byte positions are again modified.

Файл mtime не обновляется до конца записи в Linux, поэтому не должно быть возможности просмотра обновленного mtime без просмотра данных, вызвавших это mtime. Обновить.

Upon successful completion, where nbyte is greater than 0, write() will mark for update the st_ctime and st_mtime fields of the file

Ext4 пытается обеспечить соответствие POSIX -, поэтому в этом случае вы должны быть в безопасности, но не каждая файловая система полностью совместима с POSIX, поэтому YMMV.

3
27.01.2020, 21:18

Теги

Похожие вопросы