Answer the question
In order to leave comments, you need to log in
Why is writing data to the end of a file atomic if the data does not exceed the block size of the file system?
php.net/manual/en/function.fwrite.php
Если дескриптор handle был открыт функцией fopen() в режиме "добавление в конец", то вызовы fwrite() будут атомарными (за исключением случая, если размер string превысит размер блока файловой системы, на некоторых платформах, и пока файл хранится на локальной файловой системе). Т.е. нет необходимости блокировать ресурс с помощью flock() перед вызовом fwrite(), и все данные будут записаны без прерываний.
Answer the question
In order to leave comments, you need to log in
Because that's how a hard drive works. The hard drive can read or write at least 1 sector. It cannot read or write 1 byte. The sector size already depends on the hardware.
The physical sector size is complemented by the logical size of the file system cluster. Usually it is also written / read atomically, but this is already an artificial software limitation. And it can be removed by the scheduler.
For example, the sector size is 512 bytes and the cluster size is 1024 bytes.
You are reading a file that is 1 byte long.
Because the cluster size is 1024, then the file system will request 2 sectors of 512 bytes from the disk.
Then you decide to change 1 byte and write.
Файловая система отправит на запись 2 сектора по 512 байт. Тут в действие может вступить планировщик, определить какие данные изменились и реально на запись отправить лишь 1 сектор.
Потому что она атомарна. Ее нельзя разбить на несколько более мелких.
Странно бы было если бы она была не атомарна.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question