В действительности, почти никогда. Все, что вы делаете, означает, что компилятор делает заданную функцию встроенной (например, заменяет все вызовы на эту функцию / w ее тело). Конечно, нет никаких гарантий: компилятор может игнорировать директиву.
Компилятор обычно хорошо справляется с обнаружением + оптимизации таких вещей.
Теперь, когда я прочитал книгу Моника Баха «Дизайн операционных систем Unix», позвольте мне сам ответить на этот вопрос.
Короче говоря, обеспечение бесперебойного ввода-вывода для того, чтобы сделать задачу ввода-вывода законченной как можно скорее, без вмешательства со стороны сигналов.
Некоторые связанные знания, которые я получил от книга:
Согласно документации Linux Developers Documentation , это предотвращает потерю данных и не позволяет аппаратным средствам попадать в несогласованное состояние.
Представьте, что может произойти, если read()
как с диска) были прерывистыми, и обработчик сигналов, среди других обязанностей, изменил буфер чтения. Поскольку сигнал является асинхронным, результаты считывания не будут воспроизводимыми. Подобный хаос возникнет, если запись будет прервана.