Преимуществом буферизации является эффективность. Как правило, быстрее записать блок размером 4096 байт в файл, чем записать, скажем, один байт 4096 раз.
Недостатком буферизации является то, что вы упускаете обратную связь. Вывод на дескриптор может оставаться в памяти до тех пор, пока не будет записано достаточно байтов, чтобы сделать запись в дескриптор файла целесообразной. Одна часть вашей программы может записывать некоторые данные в файл, но другая часть программы или другая программа не могут получить доступ к этим данным, пока первая часть вашей программы не скопирует данные из памяти на диск. В зависимости от того, как быстро данные записываются в этот файл, это может занять произвольно много времени.
Когда вы вызываете flush()
, вы просите ОС немедленно записать все данные, находящиеся в буфере, в дескриптор файла, даже если буфер не заполнен.