Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/shm.h>
- #include <string.h>
- #include <sys/sem.h>
- #include "semafori.h"
- #define SHM_KEY (key_t)1234
- #define SEM_KEYR (key_t)5678
- #define SEM_KEYW (key_t)9012
- struct DataCondivisa {
- int intero;
- float reale;
- };
- int main(void){
- int running= 1;
- unsigned int count=0;
- void * ShmP= (void *)0;
- struct DataCondivisa *p;
- int ShmID;
- int WriteID, ReadID;
- WriteID= semget(SEM_KEYW, 1, 0666 | IPC_CREAT);
- if (WriteID==-1){
- perror("Errore dio ca\n");
- exit(EXIT_FAILURE);
- }
- ReadID= semget(SEM_KEYR, 1, 0666 | IPC_CREAT);
- if (ReadID==-1){
- perror("Errore dio ca\n");
- exit(EXIT_FAILURE);
- }
- ShmID= semget(SHM_KEY, sizeof(struct DataCondivisa), 0666 | IPC_CREAT);
- if (ShmID==-1){
- perror("Errore dio ca\n");
- exit(EXIT_FAILURE);
- }
- ShmP=shmat(ShmID, (void *)0, 0);
- if (ShmP== (void *)-1) {
- perror("Hai sbagliato orca madò\n");
- exit(EXIT_FAILURE);
- }
- p=(struct DataCondivisa *) ShmP;
- printf("La memoria si attacca al cazzo %d %f\n", p->intero, p->reale);
- while(running) {
- if(SEM_P(WriteID)==-1) exit (EXIT_FAILURE);
- printf("Inserisci un numero intero positivo oppure uno negativo per terminare\n");
- scanf("%d", &p->intero);
- if(p->intero<0){
- running=0;
- }else {
- printf("Inserisci un numero reale\n");
- scanf("%f", &p->reale);
- }
- if (SEM_V(ReadID)==-1) exit(EXIT_FAILURE);
- }
- if (shmdt(ShmP) ==-1){
- perror("Errore dio ca\n");
- exit (EXIT_FAILURE);
- }
- exit (EXIT_SUCCESS);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement