setvbuf на STDOUT безопасно для других процессов? - PullRequest
5 голосов
/ 04 января 2012

Я использую HP-UX. Я хочу отключить буферизацию на stdout, чтобы гарантировать, что каждая строка кода будет напечатана в случае дампа памяти с помощью следующей команды:

setvbuf(stdout, NULL, _IONBF, 0); // turn off buffering for stdout

В этом случае это также влияет на другие процессы, печатающие на стандартный вывод, который перенаправляется в какой-либо файл журнала? Я хочу знать, является ли это изменение только локальным для выполняемого процесса или нет. Кроме того, могу ли я отключить буферизацию внутри процесса, а затем снова установить его в коде _IO_FBF? (перед каждым звонком)

PS: я знаю, что это отключит буферизацию и ухудшит производительность ввода / вывода, но я хочу сделать это только для целей отладки.

1 Ответ

1 голос
/ 05 января 2012

Вызов setvbuf влияет только на процедуры stdio в текущем процессе и на все дочерние процессы, но не exec'd.

То, как stdio отвечает, когда setvbuf вызывается несколько раз в одном и том же потоке, не указано в стандарте C, поэтому не выполняйте множественные вызовы в коде, который вы хотите переносить в реализациях C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...