#include #include #include #include #include #include "shared.h" int EXIT_CODE = 0; int main() { int fd; calc_data *data; fd = open(SF_NAME, O_CREAT | O_RDWR, 0666); if (fd == -1) { err(EXIT_FAILURE, "open", __LINE__ - 1); goto exit; } if (ftruncate(fd, SF_SIZE) == -1) { err(EXIT_FAILURE, "ftruncate", __LINE__ - 1); goto fd_close; } data = (calc_data *)mmap(NULL, SF_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (data == MAP_FAILED) { err(EXIT_FAILURE, "mmap", __LINE__ - 1); goto fd_close; } while (!(data->ready_flags & 1)) spin("Waiting for numbers", 250); printf("\rEnter operation (+, -, *, /): "); if (scanf(" %c", &data->operation) != 1) { err(EXIT_FAILURE, "Getting operation", __LINE__ - 1); goto munmap; } __sync_or_and_fetch(&data->ready_flags, 2); printf("Operation '%c' is written to the shared memory.\n", data->operation); munmap: munmap(data, SF_SIZE); fd_close: close(fd); exit: return EXIT_CODE; }