Чтение и запись в I/O устроены куда менее симметрично, чем вы думаете

Reading and writing are less symmetric than you (probably) think

Автор разбирает, почему read(2) и write(2) ведут себя по-разному, хотя выглядят зеркально. При чтении ошибки всплывают до возврата из fread: ядро и буферный кэш успевают сообщить о проблеме. При записи всё иначе — данные оседают в буферах, вызов возвращается с успехом, а настоящая запись и её ошибки откладываются до fflush, fclose или fsync. Многие программисты не проверяют коды возврата этих функций и теряют данные, даже не подозревая об этом.

Буферизованная запись откладывает реальный системный вызов write — в этом весь смысл. Но это означает, что и сообщение об ошибках тоже откладывается!

Ещё за этот день

2026-10-31