結局size_tって何?
よく出てくるsize_tって結局何なのか.
調べてみたら
size_tが保障しているのはunsigned integerのみで,サイズは実装依存.
でもfread()とかfwrite()にも使われているんだよね.
複数のファイルを一つのファイルにまとめるパッケージャを作っているけど,size_tはやっかいだなぁ.
fread()とかを呼ぶ時は256以上の長さのデータを扱う場合は,一回で書き込めない可能性が発生するってことか?
その辺はうまくラップクラスを作ればいいのか.
typedef /* unsigned 64bit integer */ int64_t;
struct c_style_file {
int64_t write(void* ptr, size_t elm_size, int64_t length);
// ...
private:
FILE* fp_;
};
int64_t c_stle_file::write(void* ptr, size_t elm_size, int64_t length){
int64_t len = 0; // 書込み済みサイズ
size_t ret = 0;
while(len == length){
// ret = fwrite();
// if(失敗) return len; // 強い保障はできないけど
// len += ret;
}
return len;
}
でもfwrite()関数
size_t fwrite(void*, size_t, size_t, FILE*);
第三引数にint64_t型を渡すとsize_tに入らない分が捨てられちゃうよね.
size_t型の最大値を取得できたらなぁ.
std::numeric_limits
ぁー出た出たw
http://boost.cppll.jp/HEAD/more/int_const_guidelines.htm
こちらのページによると,
#include
#include
が推奨される,とのこと.
できればFILE*は使わないでライブラリを使いたいけど(std::fstreamとかboost::filesystem::fstreamとか),windowsだと改行文字の関係(だと思う)で変になる.
デフォルトではFILE*をラップしたc_style_fileにしようかな.