Driver86
@Driver86
Немодератор toster.ru

Почему запись данных в конец файла атомарна, если данные не превышают размер блока файловой системы?

php.net/manual/ru/function.fwrite.php
Если дескриптор handle был открыт функцией fopen() в режиме "добавление в конец", то вызовы fwrite() будут атомарными (за исключением случая, если размер string превысит размер блока файловой системы, на некоторых платформах, и пока файл хранится на локальной файловой системе). Т.е. нет необходимости блокировать ресурс с помощью flock() перед вызовом fwrite(), и все данные будут записаны без прерываний.

>будут атомарными
Почему?
>на некоторых платформах
Каких? От чего это зависит?
  • Вопрос задан
  • 402 просмотра
Решения вопроса 1
Потому что так устроен жёсткий диск. Жёсткий диск может прочитать или записать минимум 1 сектор. Он не может прочитать или записать 1 байт. Размер сектора же уже зависит от железа.
К физическому размеру сектора дополняется логический размер кластера файловой системы. Обычно он тоже пишется\читается атомарно, но это уже искусственное программное ограничение. И оно может быть снято планировщиком.

Например, размер сектора 512 байт, а размер кластера 1024 байта.
Вы читаете файл длинною 1 байт.
Т.к. размер кластера 1024, то файловая система запросит с диска 2 сектора по 512 байт.
Затем вы решили изменить 1 байт и записать.
Файловая система отправит на запись 2 сектора по 512 байт. Тут в действие может вступить планировщик, определить какие данные изменились и реально на запись отправить лишь 1 сектор.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Jump
@Jump
Системный администратор со стажем.
Потому что она атомарна. Ее нельзя разбить на несколько более мелких.
Странно бы было если бы она была не атомарна.
Ответ написан
opium
@opium
Просто люблю качественно работать
потому что пишется один блок
куда еще меньше то
Ответ написан
Комментировать
RiseOfDeath
@RiseOfDeath
Диванный эксперт.
Если просто - по-тому, что драйвер ФС гарантирует атомарность данной операции. (иначе нахрен он вообще нужен?)
Если сложнее - то в двух словах не описать, гуглите.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 10:42
150000 руб./за проект
25 апр. 2024, в 10:41
2000 руб./за проект
25 апр. 2024, в 10:25
2000 руб./за проект