#define _GNU_SOURCE #include #include #include #include #include int main() { const char *filePath = "/mnt/ram0/tests_mmap_fallocate"; const size_t fileSize = 50 << 20; const int fileFlags = O_RDWR | O_CREAT | O_EXCL; int fileDescriptor = open(filePath, fileFlags, 0644); if (fileDescriptor == -1) { perror("Cannot open file"); exit(1); } char *buffer = mmap(NULL, fileSize, PROT_READ | PROT_WRITE, MAP_SHARED, fileDescriptor, 0); if (buffer == MAP_FAILED) { perror("Cannot memory map"); exit(1); } for (size_t i = 0; i < fileSize; i++) { if (fallocate(fileDescriptor, 0, i, 1) != 0) { perror("Cannot fallocate"); exit(1); } buffer[i] = 10; if (buffer[i] != 10) { fprintf(stderr, "Value not written correctly\n"); exit(1); } } for (size_t i = 0; i < fileSize; i++) { if (buffer[i] != 10) { fprintf(stderr, "Value has been modified\n"); exit(1); } } munmap(buffer, fileSize); close(fileDescriptor); return 0; }