Mac os x (10.7) で HDF5 に問題があります。いくつかのテストの後、POSIX 書き込みに 2 GB を超えるバッファー サイズで問題があるように見えることを確認しました。この問題を実証するためのテスト プログラムを作成しました。
#define _FILE_OFFSET_BITS 64
#include <iostream>
#include <unistd.h>
#include <fcntl.h>
void writePosix(const int64_t arraySize, const char* name) {
int fd = open(name, O_WRONLY | O_CREAT);
if (fd != -1) {
double *array = new double [arraySize];
double start = 0.0;
for (int64_t i=0;i<arraySize;++i) {
array[i] = start;
start += 0.001;
}
ssize_t result = write(fd, array, (int64_t)(sizeof(double))*arraySize);
printf("results for array size %lld = %ld\n", arraySize, result);
close(fd);
} else {
printf("file error");
}
}
int main(int argc, char *argv[]) {
writePosix(268435455, "/Users/tpav/testfolder/lessthan2gb");
writePosix(268435456, "/Users/tpav/testfolder/equal2gb");
}
出力:
results for array size 268435455 = 2147483640
results for array size 268435456 = -1
ご覧のとおり、ファイル オフセットの定義も試みました。これについて何かできることはありますか、それとも 2 GB 以上のチャンクを書き込む方法で回避策を探し始める必要がありますか?