動作させるにはバッファを提供する必要がありますsetvbuf()
。
static char buf[50000]; /* buf must survive until stdout is closed */
setvbuf ( stdout , buf , _IOFBF , sizeof(buf) );
マニュアルページから:
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);
}
私のシステムでは、出力はバイトstrace
の単一書き込みを示しています。42000