Иногда мы помещаем некоторые отладочные отпечатки в наш код таким образом
printf("successfully reached at debug-point 1\n");
some code is here
printf("successfully reached at debug-point 2");
После последнего printf
возникает ошибка сегментации.
Теперь в этом состоянии только debug-point1 будет напечатан на stdio. Debug-point 2 print был записан в буфер stdio, но не очищен, потому что не получил \n
, поэтому мы думаем, что сбой произойдет после debug-point1.
Чтобы избавиться от этого, если я отключу опцию буферизации с потоками stdio
и stderr
следующим образом
setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0);
Тогда безопасно ли это делать?
Почему все потоки по умолчанию буферизуются в строке?
Изменить:
Каков размер выделенного по умолчанию буфера для любого файлового потока? Я думаю, что это зависит от ОС. Я хотел бы знать о Linux.