SLLIB + SFITSIO ダイジェスト版 HTML マニュアル

使用頻度の高い API について,主要な内容を記述した, ビギナー向けのリファレンスマニュアルです.

SLLIB クラス: ストリーム / 文字列 / 文字列配列 / 文字列連想配列 / 多次元配列
SLLIB クラス用関数: 多次元配列用の統計用関数 / 多次元配列用の数学関数 / 多次元配列用の複素関数
SLLIB クラス以外: 定数・型の定義 / C99互換の複素数・複素関数
SFITSIO クラス: fitscc / fits_hdu / fits_image / fits_table / fits_table_col / fits_header / fits_header_record
SFITSIO クラス以外: 関数 / 定数・型の定義 / FITSファイルの部分読み出し機能 / FITSテンプレート / 規約外FITS拡張

SLLIB: ストリーム

次の抽象基底クラス cstreamio で基本的な API を規定しています. cstreamio クラスはプログラマは直接使う事はできません.

抽象基底クラスヘッダファイルコードnamespaceストリームの種類・機能
cstreamio #include <sli/cstreamio.h> cc sli基本的なメンバ関数の仕様を定義しているクラス

下記がプログラマが使う事のできるクラスで,cstreamioを継承しています.

継承クラスヘッダファイルコードnamespaceストリームの種類・機能
stdstreamio #include <sli/stdstreamio.h> cc sli標準入出力・標準エラー出力・標準ファイル入出力 (stdio.hに相当)
gzstreamio #include <sli/gzstreamio.h> cc sligzip圧縮・伸長に対応したファイル入出力
bzstreamio #include <sli/bzstreamio.h> cc slibzip2圧縮・伸長に対応したファイル入出力
httpstreamio #include <sli/httpstreamio.h> cc slihttpサーバからの入力(download)
ftpstreamio #include <sli/ftpstreamio.h> cc sliftpサーバから入力(download)・ftpサーバへ出力(upload)
pipestreamio #include <sli/pipestreamio.h> cc sliパイプから入力・パイプへの出力
digeststreamio #include <sli/digeststreamio.h> cc sli万能なストリーム用クラス.{std, gz, bz, http, ftp}streamioをパス名によって自動的に切り替えて利用
termlineio #include <sli/termlineio.h> cc sli便利なコマンド入力(GNU readlineへのwrapper)
termscreenio #include <sli/termscreenio.h> cc sli端末スクリーンへの入力・出力(ページャ・エディタを起動)
inetstreamio #include <sli/inetstreamio.h> cc sliシーケンシャル・1or2ウェイ接続用の低レベルインターネットクライアント

メンバ関数一覧

各クラス共通のメンバ関数:

メンバ関数機能
open(), openf() ストリームのオープン
close() ストリームのクローズ
read() データの読み込み
write() データの書き込み
bread() バイナリストリームの読み取リ(バイトオーダー変換に対応)
bwrite() バイナリストリームの書き込み(バイトオーダーの変換に対応)
rskip() 読み飛ばし(可能ならシークを利用)
wskip() 書き飛ばし(可能ならシークを利用)
getchr() 1文字の読み込み
getstr() 文字列の読み込み
getline() テキストファイルの1行読み込み
scanf() 行単位でのフォーマット読み込み
putchr() 1文字の書き込み
putstr() 文字列の書き込み
printf() フォーマット書き込み
flush() 書き込み用ストリームのフラッシュ
eof() EOF指示子の取得
error() エラー指示子の取得
reseterr() EOF指示子とエラー指示子のリセット
is_seekable() シーク可能かどうかを返す
seek() ストリームの位置の変更
rewind() ストリームの位置を先頭に変更
tell() ストリーム位置の取得

stdstreamio クラスのメンバ関数:

メンバ関数機能
eprintf() 標準エラー出力へのフォーマット書き込み
eflush() 標準エラー出力ストリームのフラッシュ

stdstreamio クラス, httpstreamio クラス, ftpstreamio クラス, digeststreamio クラス, のメンバ関数:

メンバ関数機能
content_length() ファイルサイズの取得

各クラス共通のメンバ関数

open(), openf()

int open( const char *mode, const char *path );
int openf( const char *mode, const char *path_format, ... );

ファイル名を指定して,ストリームをオープンします. 読み取りモードの時は "r" を, 書き込みモードの時は "w" を引数 mode に 指定します.

openf() の場合はファイル名を C標準関数の printf() の引数と同様に指定できます.

返り値
成功した場合は 0
エラーの場合は負の値

close()

int close();

open()で開いたストリームをクローズします.

返り値
成功した場合は 0
エラーの場合は 0 以外の値

read()

ssize_t read( void *buf, size_t size );

open()で開いたストリームからデータを読み込み,与えられた場所に格納します. 格納用バッファを buf で,そのバッファのバイトサイズを size で指定します.

返り値
成功した場合はバイト数
EOFの場合,sizeが 0 の場合は 0
エラーの場合は 負の値

write()

ssize_t write( const void *buf, size_t size );

指定されたデータを,open()で開いたストリームに書き込みます. データ用バッファを buf で,そのバッファのバイトサイズを size で指定します.

返り値
成功した場合はバイト数
エラーの場合は負の値

rskip()

ssize_t rskip( size_t n );

読み込み用ストリームに対して,可能であれば n バイトのシークを行ないます. シークができない場合は,n バイトの読み飛ばしを行ないます.

返り値
成功した場合はバイト数
ストリームが終りの場合,0バイトの読み込みが指定された場合は 0
エラーの場合は負値

wskip()

ssize_t wskip( size_t n, int ch = 0 );

書き込み用ストリームに対して,可能であれば n バイトのシークを行ないます. シークができない場合は,n バイト分キャラクタ ch を書き込みます (シーク可能な場合,ch で指定したキャラクタは書き込まれません).

返り値
成功した場合はバイト数
エラーの場合は負値

getchr()

int getchr();

open()で開いたストリームから次の文字を読み込み,int型で返します.

返り値
成功した場合は 読み込んだ文字をint型にキャストした値
ストリームの終りまたはエラーの場合は EOF

getstr()

char *getstr( char *s, size_t size );

open() で開いたストリームから文字を読み込み,指定されたバッファ s (バッファのバイト長は size) に格納します. 読み込みは EOF または改行文字を読み込んだ後,あるいは バッファ s に空きが無くなった時点で停止します.
読み込まれた改行文字も指定されたバッファに格納されます.

返り値
成功した場合は 格納バッファのアドレス
ストリームの終りまたはエラーの場合は NULL

getline()

const char *getline();

現在位置から改行文字までの文字列をライブラリ内部のバッファに読み込み, その内部バッファのアドレスを返します.

返り値
成功した場合は内部バッファのアドレス
ストリームの終りまたはエラーの場合はNULL
注意
返されたバッファをプログラマが開放してはいけません.

scanf()

int scanf( const char *format, ... )

open()で開いたストリームから行単位で読み込み, その文字列を format の指定に従って変換し,format 以降の引数に格納します.

詳細は LIBC の sscanf() のマニュアルを参照してください.

返り値
成功した場合は 入力要素数
ストリームの終りまたはエラーの場合は EOF
注意
format に "%s" を指定する場合, 格納バッファの大きさ以上の文字列が入力されると バッファオーバーランが発生します. この問題は,下記のように最大フィールド幅を指定して読み込む事で 回避できます.
    char c_buf0[20], c_buf1[20];
    f_in.scanf("%19s%*[^ ] %19s%*[^ ]",c_buf0,c_buf1);
%*[^ ] は空白以外の文字からなる文字列を 読み飛ばすための指定です.

putchr()

int putchr( int c );

指定された文字 c を open() で開いたストリームに書き込みます.

返り値
成功した場合は 書き込まれた文字をint型にキャストした値
エラーの場合は EOF

putstr()

int putstr( const char *s );

指定された文字列を open() で開いたストリームに書き込みます.

返り値
成功した場合は 負ではない値
エラーの場合は EOF

printf()

int printf( const char *format, ... );

open() で開いたストリームに,フォーマットに従って書き込みます. 引数の与え方は C標準関数の printf() と同様です.

返り値
成功した場合は 書き込まれた文字数
エラーの場合は負値

flush()

int flush();

open() で開いたストリーム内のバッファに格納されているすべてのデータを書き 込みます.

返り値
成功した場合は 0
エラーの場合は 0以外の値

eof()

int eof();

EOF指示子をテストし,セットされていれば 0 以外の数を返します.
EOF指示子は,メンバ関数 reseterr() によってのみクリアする事ができます.


error()

int error();

エラー指示子をテストし,セットされていれば 0 以外の数を返します.
エラー指示子は,メンバ関数 reseterr() によってのみクリアする事ができます.


reseterr()

cstreamio &reseterr();

EOF指示子とエラー指示子をリセットします.

返り値
自身の参照

is_seekable()

bool is_seekable() const;

オープンされているストリームがシーク可能な場合,true を返します.

返り値
シークが可能な場合は true
シークが不可能な場合は false

seek()

int seek( long offset, int whence );

ストリームの位置を変更します.

新たなストリーム位置(バイト単位)は,引数 whence で指定された位置に offset バイトを加えることによって与えます. whence には SEEK_SET,SEEK_CUR,SEEK_END のいずれかを与え, それぞれファイルの先頭,現在の位置表示子,ファイルの末尾を意味します.

返り値
成功した場合は 0
エラーの場合は 負値

rewind()

int rewind();

ストリームの位置を先頭に変更します.

返り値
成功した場合は 0
エラーの場合は 負値

tell()

long tell();

ストリーム位置表示子の値を返します.

返り値
成功した場合は 0以上の値
エラーの場合は 負値

stdstreamio クラスのメンバ関数

eprintf()

int eprintf(const char *format, ... );

標準エラー出力ストリームに,フォーマットに従って書き込みます. 引数の与え方は C標準関数の printf() と同様です.

返り値
成功した場合は書き込まれた文字数
エラーの場合は負値

eflush()

int eflush();

標準エラー出力ストリーム内のバッファに格納されているすべてのデータを 書き込みます.

返り値
成功した場合は 0
エラーの場合は 0以外の値

stdstreamio クラス, httpstreamio クラス, ftpstreamio クラス, digeststreamio クラス,のメンバ関数

content_length()

long long content_length() const;

ファイルのサイズを返します.

標準入力に対しては 0 を返します. http サーバまたは ftp サーバから取得する場合, ファイルサイズを取得できない事があります.また, 圧縮ファイルの場合は圧縮された状態でのファイルサイズを返します.

返り値
成功した場合はファイルサイズ
エラーの場合は負値