0

プログラムに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 なのですか?

4

0 に答える 0