使用頻度の高い 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拡張 |
次の抽象基底クラス 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 | sli | gzip圧縮・伸長に対応したファイル入出力 |
bzstreamio | #include <sli/bzstreamio.h> |
cc | sli | bzip2圧縮・伸長に対応したファイル入出力 |
httpstreamio | #include <sli/httpstreamio.h> |
cc | sli | httpサーバからの入力(download) |
ftpstreamio | #include <sli/ftpstreamio.h> |
cc | sli | ftpサーバから入力(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() | ストリーム位置の取得 |
メンバ関数 | 機能 |
---|---|
eprintf() | 標準エラー出力へのフォーマット書き込み |
eflush() | 標準エラー出力ストリームのフラッシュ |
メンバ関数 | 機能 |
---|---|
content_length() | ファイルサイズの取得 |
int open( const char *mode, const char *path ); int openf( const char *mode, const char *path_format, ... );
ファイル名を指定して,ストリームをオープンします.
読み取りモードの時は "r"
を,
書き込みモードの時は "w"
を引数 mode
に
指定します.
openf() の場合はファイル名を C標準関数の printf() の引数と同様に指定できます.
int close();
open()で開いたストリームをクローズします.
ssize_t read( void *buf, size_t size );
open()で開いたストリームからデータを読み込み,与えられた場所に格納します.
格納用バッファを buf
で,そのバッファのバイトサイズを
size
で指定します.
size
が 0 の場合は 0ssize_t write( const void *buf, size_t size );
指定されたデータを,open()で開いたストリームに書き込みます.
データ用バッファを buf
で,そのバッファのバイトサイズを
size
で指定します.
ssize_t rskip( size_t n );
読み込み用ストリームに対して,可能であれば n バイトのシークを行ないます. シークができない場合は,n バイトの読み飛ばしを行ないます.
ssize_t wskip( size_t n, int ch = 0 );
書き込み用ストリームに対して,可能であれば n バイトのシークを行ないます. シークができない場合は,n バイト分キャラクタ ch を書き込みます (シーク可能な場合,ch で指定したキャラクタは書き込まれません).
int getchr();
open()で開いたストリームから次の文字を読み込み,int型で返します.
char *getstr( char *s, size_t size );
open() で開いたストリームから文字を読み込み,指定されたバッファ s
(バッファのバイト長は size) に格納します.
読み込みは EOF または改行文字を読み込んだ後,あるいは
バッファ s に空きが無くなった時点で停止します.
読み込まれた改行文字も指定されたバッファに格納されます.
const char *getline();
現在位置から改行文字までの文字列をライブラリ内部のバッファに読み込み, その内部バッファのアドレスを返します.
int scanf( const char *format, ... )
open()で開いたストリームから行単位で読み込み, その文字列を format の指定に従って変換し,format 以降の引数に格納します.
詳細は LIBC の sscanf() のマニュアルを参照してください.
"%s"
を指定する場合,
格納バッファの大きさ以上の文字列が入力されると
バッファオーバーランが発生します.
この問題は,下記のように最大フィールド幅を指定して読み込む事で
回避できます.
char c_buf0[20], c_buf1[20]; f_in.scanf("%19s%*[^ ] %19s%*[^ ]",c_buf0,c_buf1);
%*[^ ]
は空白以外の文字からなる文字列を
読み飛ばすための指定です.
int putchr( int c );
指定された文字 c を open() で開いたストリームに書き込みます.
int putstr( const char *s );
指定された文字列を open() で開いたストリームに書き込みます.
int printf( const char *format, ... );
open() で開いたストリームに,フォーマットに従って書き込みます. 引数の与え方は C標準関数の printf() と同様です.
int flush();
open() で開いたストリーム内のバッファに格納されているすべてのデータを書き 込みます.
int eof();
EOF指示子をテストし,セットされていれば 0 以外の数を返します.
EOF指示子は,メンバ関数 reseterr() によってのみクリアする事ができます.
int error();
エラー指示子をテストし,セットされていれば 0 以外の数を返します.
エラー指示子は,メンバ関数 reseterr() によってのみクリアする事ができます.
cstreamio &reseterr();
EOF指示子とエラー指示子をリセットします.
bool is_seekable() const;
オープンされているストリームがシーク可能な場合,true を返します.
int seek( long offset, int whence );
ストリームの位置を変更します.
新たなストリーム位置(バイト単位)は,引数 whence で指定された位置に offset バイトを加えることによって与えます. whence には SEEK_SET,SEEK_CUR,SEEK_END のいずれかを与え, それぞれファイルの先頭,現在の位置表示子,ファイルの末尾を意味します.
int rewind();
ストリームの位置を先頭に変更します.
long tell();
ストリーム位置表示子の値を返します.
int eprintf(const char *format, ... );
標準エラー出力ストリームに,フォーマットに従って書き込みます. 引数の与え方は C標準関数の printf() と同様です.
int eflush();
標準エラー出力ストリーム内のバッファに格納されているすべてのデータを 書き込みます.
long long content_length() const;
ファイルのサイズを返します.
標準入力に対しては 0 を返します. http サーバまたは ftp サーバから取得する場合, ファイルサイズを取得できない事があります.また, 圧縮ファイルの場合は圧縮された状態でのファイルサイズを返します.