__fbufsize, __flbf, __fpending, __fpurge, __freadable, __freading,
__fsetlocking, __fwritable, __fwriting, _flushlbf -
標準入出力ファイル構造体へのインターフェース
#include <stdio.h>
#include <stdio_ext.h>
size_t __fbufsize(FILE *stream);
size_t __fpending(FILE *stream);
int __flbf(FILE *stream);
int __freadable(FILE *stream);
int __fwritable(FILE *stream);
int __freading(FILE *stream);
int __fwriting(FILE *stream);
int __fsetlocking(FILE *stream, int type);
void _flushlbf(void);
void __fpurge(FILE *stream);
Solaris では、
FILE
構造体の内部へポータブルなかたちで
アクセスできる手段が導入されており、これらは
glibc
でも実装されている。
__fbufsize()
関数は、指定されたストリームが使用しているバッファーサイズを返す。
__fpending()
関数は、出力バッファーに入っているデータのバイト数を返す。
ワイドキャラクターを扱うストリームの場合、ワイドキャラクター単位で計算される。
バッファーが読み出しモードの場合や読み出し専用で開かれている場合の
この関数の振舞いは未定義である。
__flbf()
関数は、ストリームがラインバッファーの場合は
0 以外を、
それ以外の場合は 0
を返す。
__freadable()
関数は、ストリームが読み出し可能な場合は
0 以外を、
それ以外の場合は 0
を返す。
__fwritable()
関数は、ストリームが書き込み可能な場合は
0 以外を、
それ以外の場合は 0
を返す。
__freading()
関数は、ストリームが読み出し専用の場合、またはストリームに対する直前の操作が
読み出し操作であった場合は
0
以外を返し、それ以外の場合は
0 を返す。
__fwriting()
関数は、ストリームが書き込み専用(もしくは追加専用)の場合、
またはストリームに対する直前の操作が書き込み操作であった場合は
0 以外を返し、
それ以外の場合は 0
を返す。
__fsetlocking()
関数は、ストリームのロック形式を選択するために使用できる。
返り値は、現在のロック形式である。
type 引数は以下の 3
種類の値をとることができる
:
- FSETLOCKING_INTERNAL
- 指定されたストリームに対して操作が行われる度に、操作の前後で
明示的に指示しなくてもストリームのロック処理を行う
(但し、*_unlocked
関数を使用した場合は例外である)。
これがデフォルトのロック形式である。
- FSETLOCKING_BYCALLER
- 関数の呼び出し元でロックの面倒をみる。
(おそらく、複数のスレッドが存在する状況では
flockfile(3)
を使うことになるだろう)
ロック形式が
FSETLOCKING_INTERNAL
にリセットされるまでは標準入出力関連の関数はロック処理を行わない。
- FSETLOCKING_QUERY
- ロック形式の変更を行わない。(現在の形式を返すだけである)
_flushlbf()
関数は、すべてのラインバッファー
(line-buffered)
タイプのストリームの
内容を出力(フラッシュ)する。
(当然ながら、端末への出力が強制的に行われることになるので、
キーボードからの入力を読みこむ前にこの関数を呼んだ方がいいだろう)
__fpurge()
関数は、ストリームのバッファーの内容を廃棄する。
この節で使用されている用語の説明については、
attributes(7) を参照。
インターフェース |
属性 |
値 |
__fbufsize(), __fpending(), __fpurge(),
__fsetlocking() |
Thread safety |
MT-Safe race:stream |
__flbf(), __freadable(), __freading(),
__fwritable(), __fwriting(), _flushlbf() |
Thread safety |
MT-Safe |
flockfile(3),
fpurge(3)
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。