Будет ли буфер io автоматически очищаться при сбое программы? - PullRequest
0 голосов
/ 27 марта 2020

Давайте поговорим о программировании на c ++, будет ли буфер ввода-вывода автоматически очищаться при сбое программы? если нет, то за этим должны быть некоторые соображения, в чем причина?

cout << "some text";
// here our program crashed unexpected, whether the IO buffer will be automatically cleared?
doSomethingThatCrashTheProgram();

Является ли IO буферизовать общую память или пространство, выделенное каждой программе отдельно?

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Не будет.

Вот почему каналы C stderr и C ++ cerr IO не буферизованы. Таким образом, операторы журнала ошибок становятся доступными пользователю, как только они записаны, так что более поздний cra sh не будет их скрывать.

Если у вас есть файл дампа памяти, достаточно усилий вы можете найдите буфер ввода-вывода и посмотрите, что там.

Причина, по которой не очищается буфер, проста: это cra sh! Программа сделала что-то не так и была убита за это. Должна ли операционная система вмешиваться и пробираться сквозь осколки возможно поврежденной памяти программ, чтобы найти буфер ввода-вывода? Это слишком много, чтобы просить.

0 голосов
/ 27 марта 2020

Ответ в doSomethingThatCrashTheProgram(). Если вы не контролируете эту функцию (что кажется маловероятным), ваша программа, вероятно, отображает какое-то неопределенное поведение.

С неопределенным поведением вы на неправильном пути, ожидая ничего . Программа может грипп sh, очистить или даже вызвать носовые демоны .

...