setbuf
提供: cppreference.com
<tbody>
</tbody>
<tbody class="t-dcl-rev ">
</tbody><tbody>
</tbody>
| ヘッダ <stdio.h> で定義
|
||
void setbuf( FILE *stream, char *buffer ); |
(C99未満) | |
void setbuf( FILE *restrict stream, char *restrict buffer ); |
(C99以上) | |
ストリーム操作のために使用するための内部バッファを設定します。 少なくとも BUFSIZ 文字の長さであるべきです。
buffer がヌルでない場合は、 setvbuf(stream, buffer, _IOFBF, BUFSIZ) と同等です。
buffer がヌルの場合は、 setvbuf(stream, NULL, _IONBF, 0) と同等です。 これはバッファリングを無効化します。
引数
| stream | - | バッファを設定するファイルストリーム |
| buffer | - | 使用するストリームのためのバッファを指すポインタ。 NULL が指定された場合、バッファリングは無効化されます |
戻り値
(なし)
ノート
BUFSIZ が適切なバッファサイズでない場合は、それを変更するために setvbuf を使用することができます。
setbuf は成功失敗を示さないため、エラーを検出するためにも setvbuf を使用するべきです。
この関数は stream が開いているファイルに紐付けられた後、しかしいかなる他の操作も行われる前 (失敗した setbuf/setvbuf を除く) にのみ、使用することができます。
よくある間違いは、 stdin や stdout のバッファをプログラム終了前に生存期間が終了する配列に設定することです。
int main(void) {
char buf[BUFSIZ];
setbuf(stdin, buf);
} // lifetime of buf ends, undefined behavior
例
直ちに出力することが求められるストリームのバッファリングを無効化するために setbuf を使用することができます。
Run this code
#include <stdio.h>
#include <threads.h>
int main(void)
{
setbuf(stdout, NULL); // unbuffered stdout
putchar('a'); // 'a' appears immediately if stdout is unbuffered
thrd_sleep(&(struct timespec){.tv_sec=1}, NULL); // sleep 1 sec
putchar('b');
}
出力:
ab