プログラムにcrcを保存したい。これを行うには、次の構造を含むファイルを作成します
struct CRC_DATA {
uchar label[16];
ulong crc;
} crcData = {{"fdgnrtrbdbd"}, 0};
ファイルのサイズを取得します
struct stat fileStat;
int size = 0;
if(!stat(path.c_str(), &fileStat)) {
size = fileStat.st_size;
}
return size;
CRC を保存する場所を見つけるには、次の手順を実行します。
int map_ = shm_open(path.c_str(), O_CREAT | O_RDWR, S_IRWXU);
if (map_ == -1) {
closeFile();
return false;
}
ftruncate(map_, size);
void* mapView_ = mmap(0 , size, PROT_READ | PROT_WRITE, MAP_SHARED, map_, 0);
mapView_ は、メモリ内のファイルの先頭を指します。
uchar* base = static_cast<uchar*>(mapView_);
uchar* fileEnd = base + size;
uchar* labelStart = std::search(base, fileEnd, crcData.label, crcData.label + sizeof(crcData.label));
確認してください
if (labelStart == fileEnd) {
errorStream_.clear();
errorStream_.str("");
errorStream_ << "In file '" << fileName_ << "' don't find crc";
return false;
}
アプリケーションを実行すると、「ファイル fileName に crc が見つかりません」というエラーが表示されます。なぜ labelStart == fileEnd なのですか?