STDOUT上的setvbuf对其他进程是否安全?

rAp*_*t0r 5 c stdout hp-ux buffering

我正在使用HP-UX.我想在stdout上禁用缓冲,以确保在使用以下命令进行核心转储的情况下打印每行代码:

setvbuf(stdout, NULL, _IONBF, 0); // turn off buffering for stdout
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它是否也影响打印到stdout的其他进程被重定向到某个日志文件?我想知道这个更改是否仅对于正在执行的进程是本地的.此外,我可以在进程中禁用缓冲,然后再在代码中再次设置_IO_FBF吗?(每次通话前fflush)

PS:我知道这会禁用缓冲并且I/O性能更差,但我想这只是为了调试目的.

Kyl*_*nes 1

setvbuf 调用仅影响当前进程中的 stdio 例程以及任何子进程 fork'd,但不影响 exec'd。

C 标准中未指定在同一流上多次调用 setvbuf 时 stdio 如何响应,因此请勿在希望跨 C 实现移植的代码中发出多次调用。