增加标准输出缓冲区的大小

use*_*273 2 c linux buffer

我正在运行一个程序,该程序启动一个进程,然后该进程将其写入程序所使用的stdout。问题是,我需要的输出约为42000字节。似乎stdout缓冲区的大小是8192,我不希望它刷新到42000。是否有办法设置它?

我尝试了这个:

setvbuf ( stdout , NULL , _IOFBF , 50000 ); // ie set it to 50000 bytes
Run Code Online (Sandbox Code Playgroud)

在子流程的代码上,但似乎根本不起作用。有人有什么想法吗?

jxh*_*jxh 5

您需要提供一个缓冲区setvbuf()才能工作。

static char buf[50000]; /* buf must survive until stdout is closed */
setvbuf ( stdout , buf , _IOFBF , sizeof(buf) );
Run Code Online (Sandbox Code Playgroud)

手册页

int setvbuf(FILE *stream, char *buf, int mode , size_t size);
...
除了未缓冲的文件外,该buf参数应指向至少size长度为字节的缓冲区;将使用此缓冲区代替当前缓冲区。 如果参数buf为NULL,则仅影响模式。在下一次读或写操作时将分配一个新的缓冲区。

这是一个示例程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char *argv[]) {
    char msg[42000];
    char buf[50000];

    setvbuf(stdout, buf, _IOFBF, sizeof(buf));
    memset(msg, 'a', sizeof(msg));
    msg[sizeof(msg)-1] = '\0';
    puts(msg);
    exit(0);
}
Run Code Online (Sandbox Code Playgroud)

在我的系统上,strace输出显示单个42000字节写入。