stream

Introduction

C から C++ に移行する際に一番私が困ったのが stdio から iostream への移行でした。
どこの本を見ても口を揃えたように iostream を使えといってる割には cout の使い方しか書いてない本だらけ(しかも << と >> とマニピュレータの説明だけ)
多分「プログラミング言語 C++」には書いてあるんだろうけど私は持ってない・・・。(買えよ(笑))
そんなわけで移行できるかーと叫びつつ、私は cstdio を include して逃げてたのでした(よわ)
ある日、なかなか良いページを見つけて、ついに stdio から iostream に移行することに成功しました。
自分の参照用かつ自分と同様に困っている人のためにこのページを書いてみました。

Reference

fopen - FILE *fopen(const char *filename, const char *mode)

これに対応するメソッドは open です。
void fstream::open(const char *name, int mode, int prot=0664)

prot はよく知りません。
UNIX 等のファイルにパーミッションがあるファイルシステム上で利用するものではないかと私は予測してます。
取り合えず省略できるので見なかったことにしましょう。

enum open_mode {binary=0, in=1, out=2, ate=4, app=8, trunc=0x10, nocreate=0x20, noreplace=0x40};
mode はこれの or を取ります。

<例>
#include <fstream>
using namespace std;

int main(void){
    ofstream ofs;

    ofs.open("test.txt", ios::out | ios::bin);
    ofs << "Hello world" << endl;
    ofs.close();

    return 0;
}

fclose - int fclose(FILE *stream)

これに対応するメソッドは close です
void fstreambase::close()

fgetc, getc - int fgetc(FILE *stream), int getc(FILE *stream)

これに対応するメソッドは get です。
int istream::get()

fputc, putc - int fputc(int c, FILE *stream), int putc(int c, FILE *stream)

これに対応するメソッドは put です。
ostream& ostream::put(char c)

fread - size_t fread(void *ptr, size_t size, size_t nobj, FILE *stream)

これに対応するメソッドは read です。
istream& istream::read(void *ptr, streamsize n)

fwrite - size_t fwrite(const void *ptr, size_t size, size_t nobj, FILE *stream)

これに対応するメソッドは write です。
ostream& ostream::write(const void *s, streamsize n)

fseek - int fseek(FILE *stream, long offset, int origin)

これに対応するメソッドは seekp, seekg です。
ostream& ostream::seekp(streampos)
ostream& ostream::seekp(streamoff, _seek_dir)
istream& istream::seekg(streampos)
istream& istream::seekg(streamoff, _seek_dir)
見てわかるとおり入力と出力でメソッド名が違います。

enum seek_dir { beg=0, cur=1, end=2 }
これを使って相対指定します。

<例>
ifstream ifs("test.txt", ios::in);
・
・
・
ifs.seekg(sizeof(int) * -4, ios::end);

以下未確認な物

int fflush(FILE *stream)
ostream& ostream::flush()
char *fgets(char *s, int n, FILE *stream)
istream& istream::getline(signed char* ptr, int len, char delim = '\n')
char *gets(char *s)
istream& istream::gets(char **s, char delim = '\n')
int ungetc(int c, FILE *stream)
istream& istream::unget()
long ftell(FILE *stream)
streampos ostream::tellp()
streampos istream::tellg()

Return index page