QIO(3)

名前
qio - 高速 I/O 操作に関する InterNetNews ライブラリ

形式
#include "qio.h"
QIOSTATE *
QIOopen(name, size)
    char	*name;
    int	size;
QIOSTATE *
QIOfdopen(fd, size)
    int	fd;
    int	size;
void
QIOclose(qp)
    QIOSTATE	*qp;
char *
QIOread(qp)
    QIOSTATE	*qp;
int
QIOlength(qp)
    QIOSTATE	*qp;
int
QIOtoolong(qp)
    QIOSTATE	*qp;
int
QIOerror(qp)
    QIOSTATE	*qp;
int
QIOtell(qp)
    QIOSTATE	*qp;
int
QIOrewind(qp)
    QIOSTATE	*qp;
int
QIOfileno(qp)
    QIOSTATE	*qp;

機能説明
この man ページで説明するルーチンは InterNetNews ライブラリの libinn(3) に含まれています。 これらのルーチンはファイルへの高速な read アクセスを行うために使用します。 ``QIO'' は Quick I/O を意味します。

QIOopen は name というファイルを読み込むためにオープンします。 このルーチンでは size バイトのバッファを使用し、これはファイル内のもっとも長い行よりも大きくなくてはいけません。 ヘッダファイルでは適切なデフォルトとして定数の QIO_BUFFER を定義しています。 size が 0 の場合、 QIOopen は stat(2) を呼び、得られたブロックサイズを使用します。 エラーの場合、 QIO_BUFFER を使用します。 このルーチンの戻り値は、他のルーチンで使用することになるハンドラへのポインタで、 エラーの場合には NULL となります。 QIOfdopen は fd がすでにオープンされているディスクリプタを示す以外は QIOopen と同じです。

QIOclose はオープンしているファイルをクローズし、使用していた資源を解放します。

QIOread はファイル内での次の行へのポインタを返します。 次の行の行末は \0 に置き換えられます。 ポインタの中身が EOF の場合、エラーが発生したことを示し、 QIOread の戻り値が NULL の場合は、読み込んだ行がバッファよりも長いことを示します。

QIOread を正常に行った後、 QIOlength を呼ぶと、その戻り値はカレントの行の長さとなります。

QIOread の戻り値が NULL の場合に、 QIOtoolong と QIOerror という関数を呼んでエラーであったのか、 読み込んだ行が長すぎたのかを決めることができます。 QIOtoolong の戻り値が 0 以外となれば、カレントの行はバッファに収まっていないことになり、 続いて QIOread を呼んで残りの行を読み込もうとします。 長すぎる行は、捨てられます。 QIOerror の戻り値が 0 以外となれば、重大な I/O エラーが起きたことになります。

QIOtell の戻り値は次の行が始まる lseek(2) での offset となります。

QIOrewind は読み込みのためのポインタをファイルの先頭に戻します。

QIOfileno の戻り値はオープンしたファイルのディスクリプタとなります。

QIOlength、 QIOtoolong、 QIOerror、 QIOtell および QIOfileno はヘッダファイルで定義されるマクロとなっています。

使用例
    QIOSTATE	*h;
    long	offset;
    char	*p;
    h = QIOopen("/etc/motd", QIO_BUFFER);
    for (offset = QIOtell(h); (p = QIOread(h)) != NULL;
        offset = QIOtell(h))
        printf("At %ld, %s\n", offset, p);
    if (QIOerror(h)) {
        perror("Read error");
        exit(1);
    }
    QIOclose(h);

履歴
InterNetNews 用に Rich $alz <rsalz@uunet.uu.net> により記述されました。