Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ setbuffer(3S) — NEWS-os 3.3

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

fopen(3S)

getc(3S)

putc(3S)

malloc(3)

fclose(3S)

puts(3S)

printf(3S)

fread(3S)

SETBUF(3S)  —  UNIX Programmer’s Manual

名称

setbuf, setbuffer, setlinebuf − ストリームへのバッファリングの割り当て

形式

#include <stdio.h>

setbuf(stream, buf)
FILE ∗stream;
char ∗buf;

setbuffer(stream, buf, size)
FILE ∗stream;
char ∗buf;
int size;

setlinebuf(stream)
FILE ∗stream;

解説

利用できるバッファリングのタイプは、 "バッファリングなし"、 "ブロック単位でのバッファリング"、 "行単位でのバッファリング" の 3つです。 出力ストリームがバッファリングされない場合、 情報は出力されると同時に目的ファイルあるいは端末に表示されます。 ブロック単位のバッファリングの場合、 バッファリングされた多くの文字はブロック毎に出力されます。 行単位でバッファリングしている場合、 改行文字まで、または 入力を標準入力から読み込むまで、 バッファリングされます。 また、 fflush (fclose(3S) 参照)を 使用して、 バッファリングされているものを その時点で出力してしまうことができます。 一般に、 すべてのファイルはブロック単位でバッファリングされます。 バッファは、 ファイルに対する最初の getc または putc(3S) で用いる malloc(3) によって確保されます。 標準ストリーム stdout が端末に向けられている場合、 行単位にバッファリングされます。 標準ストリーム stderr は、 常にバッファリングされません。

setbuf は、 ストリームがオープンされた後、 それが読み書きされる前に使用します。 文字配列 buf は、 自動的に割り当てられるバッファの代わりに使用されます。 buf が定数ポインタ NULL の場合、 入出力は全くバッファリングされません。 特定の定数 BUFSIZ は、 配列がどのくらいの大きさを 必要とするかを 示します。

char buf[BUFSIZ];

setbuf の代替形式である setbuffer は、 ストリームがオープンされた後、 それが読み書きされる前に使用します。 文字配列 buf は、 そのサイズが引数 size で決められ、 自動的に割り当てられるバッファの代わりに使用されます。 buf が定数ポインタ NULL の場合、 入出力は全くバッファリングされません。

setlinebuf を 使用して、 stdout あるいは stderr を ブロック単位でのバッファリングまたはバッファリングなしの状態から、 行単位のバッファリングに変更できます。 setbuffer が setbuf と違う点は、 ファイル記述子がアクティブな時はいつでも使用できることです。

freopen (fopen(3S) 参照)を 使用して、 ファイルはバッファリングなしの状態または行単位でのバッファリングから、 ブロック単位でのバッファリングを するように変更できます。 freopen の後に、 バッファの引数を NULL にして setbuf を 使用し、 ブロック単位または行単位のバッファリングから バッファリングなしに変更することもできます。

関連事項

fopen(3S), getc(3S), putc(3S), malloc(3), fclose(3S), puts(3S), printf(3S), fread(3S)

バグ

標準エラーストリームは、 デフォルトで行単位のバッファリングが行われるべきです。 setbuffer と setlinebuf 関数は、 4.2BSD (NEWS-OS 2.X) のバージョン以外には移植できません。 NEWS-OS 2.X(4.2BSD)および NEWS-OS 3.X(4.3BSD) システムでは、 setbuf は必ずしも最適なバッファサイズを 使用しているわけではありませんので、 使用は避けたほうがよいでしょう。 デフォルトのファイル入出力バッファサイズが最適になっているので、 通常、 setbuffer は必要ありません。

NEWS-OSRelease 3.3

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026