int open_map(int fd, struct stat *sb, const char * const name) { // !!! Map process into memory new_files[num_new_files].start = mmap(NULL, sb->st_size, PROT_READ, MAP_SHARED, fd, 0); if(new_files[num_new_files].start == MAP_FAILED) { log(LOG_ERR, "Error mmaping %s: %s", name, strerror(errno)); close(fd); return 0; } // !!! Lock in-memory process down if(mlock(new_files[num_new_files].start, sb->st_size) == -1) { log(LOG_ERR, "Can't lock memory for %s, error %s", name, strerror(errno)); munmap(new_files[num_new_files].start, sb->st_size); close(fd); return 0; } if(sb->st_size % page_size) new_files[num_new_files].map_size = sb->st_size - (sb->st_size % page_size) + page_size; else new_files[num_new_files].map_size = sb->st_size; new_files[num_new_files].fd = fd; memcpy(&new_files[num_new_files].sb, sb, sizeof(struct stat)); new_files[num_new_files].name = strdup(name); num_new_files++; log(LOG_INFO, "Mapped file %s", name); return 1; }