30 if(touchAll && !lockName.empty()){
34 chmod(lockName.c_str(), S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH);
35 chmod((lockName+
".done").c_str(), S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH);
37 lockMain = fopen(lockName.c_str(),
"w");
38 int ret = flock(
fileno(lockMain), LOCK_EX);
45 lockDone = fopen((lockName+
".done").c_str(),
"w");
46 ret = flock(
fileno(lockDone), LOCK_EX | LOCK_NB);
63 FILE*
f = fopen(fname.c_str(),
"r");
68 const long fsize = st.st_size;
70 void*
ret = mmap(addr, fsize, PROT_READ, MAP_SHARED | MAP_FIXED,
fileno(f), 0);
78 for(
long i = 0;
i < fsize;
i += 4096){
80 tot += ((
char*)addr)[
i];
85 if(!lockName.empty()){
86 lockDone = fopen((lockName+
".done").c_str(),
"w");
89 flock(
fileno(lockDone), LOCK_SH);
92 if(lockMain)
fclose(lockMain);
long MMapFileAtAddress(const std::string &fname, void *addr, bool touchAll, const std::string &lockName)
assert(nhit_max >=nhit_nbins)