我想将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;
}
当我运行应用程序时,出现错误“在文件文件名中找不到 crc”。为什么我有 labelStart == fileEnd?