#include #include #include void set(int fd, size_t elem, int value) { //lseek(fd,elem * sizeof(int), SEEK_SET); non-atomic //write(fd, &value, sizeof (int)); pwrite(fd, &value, sizeof (int), elem * sizeof(int)); } int get(int fd, size_t elem) { //lseek(fd, elem * sizeof(int), SEEK_SET); int value = 0; pread(fd, &value, sizeof (int), elem * sizeof(int)); return value; } int main() { int fd = open("mem", O_RDWR|O_CREAT, 0666); if (fd < 0) { perror("mem"); return 1; } for (int i = 0; i < 100; i++) { set(fd, i*1000, i+1); } for (int i = 0; i < 100000; i++) { int x = get(fd,i); if (x != 0) { printf("mem[%d]=%d\n", i, x); } } close(fd); }