#include #include #include #include #include #include #include const char *path = "/tmp/sem.server341321"; void handle_error(char *txt) { perror(txt); exit(-1); } char *buf; int main() { key_t sem_key, shm_key; struct sembuf sem; sem.sem_flg = 0; int sem_id, shm_id; if (access(path, F_OK) != 0) handle_error("file does not exist"); if ((sem_key = ftok(path, 0)) == -1) handle_error("ftok sem"); if ((shm_key = ftok(path, 1)) == -1) handle_error("ftok shm"); if ((sem_id = semget(sem_key, 2, 0600 | IPC_CREAT)) == -1) handle_error("shmget"); if ((shm_id = shmget(shm_key, sizeof(1024), 0600 | IPC_CREAT)) == -1) handle_error("shmget"); if ((buf = shmat(shm_id, 0, 0)) == NULL) handle_error("shmat"); double d1 = 23; // while (1) { sem.sem_num = 0; sem.sem_op = -1; if (semop(sem_id, &sem, 1) == -1) handle_error("semop 1"); // printf("a\n"); memcpy(buf, &d1, sizeof(double)); printf("sent %f\n", d1); sem.sem_num = 1; sem.sem_op = 1; if (semop(sem_id, &sem, 1) == -1) handle_error("semop 2"); // printf("b\n"); } { sem.sem_num = 0; sem.sem_op = -1; if (semop(sem_id, &sem, 1) == -1) handle_error("semop 1"); memcpy(&d1, buf, sizeof(double)); printf("received %f\n", d1); sem.sem_num = 0; sem.sem_op = 1; if (semop(sem_id, &sem, 1) == -1) handle_error("semop 1"); // printf("b\n"); } if (shmdt(buf) == -1) handle_error("shmdt"); return 0; }