#include #include #include #include #include #include #define CHECK(result, textOnFail) \ if (((long int)result) == -1) { \ perror(textOnFail); \ exit(1); \ } struct myData { int version; char text[1020]; }; volatile sig_atomic_t stopFlag = 0; void ctrlC(int num) { stopFlag = 1; } int main() { int fd = shm_open("/os_cp", O_RDWR | O_CREAT, 0600); CHECK(fd, "shm_open failed"); int r = ftruncate(fd, sizeof(struct myData)); CHECK(r, "ftruncate failed"); struct myData *data = mmap(NULL, sizeof(struct myData), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); CHECK(data, "mmap failed"); close(fd); signal(SIGINT, ctrlC); while (!stopFlag) { for (char letter = 'a'; letter <= 'z'; ++letter) { data->version++; for (int i = 0; i < 1020 - 1; ++i) { data->text[i] = letter; } if (stopFlag) break; } } munmap(data, sizeof(struct myData)); return 0; }