int main(){ key_t clave; int mem, *nums, numsAux[3], semaforo, i = 0; clave = ftok(".",'F'); mem = shmget(clave, TAM * sizeof(int), IPC_CREAT | 0660); nums = (int*) shmat(mem, NULL, 0); if ( ( semaforo = semget(clave, 2, IPC_CREAT | IPC_EXCL | 0660 ) ) == -1 ){ perror("main: semget"); semctl(semaforo, 0, IPC_RMID); exit(1); } setSem(semaforo, 0, 1); setSem(semaforo, 1, 0); printf("Ingrese 3 numeros enteros.\n"); for( i = 0 ; i < 3 ; i++){ printf("-> "); scanf("%d", &numsAux[i]); } while(numsAux[0] != 99 && numsAux[1] != 99 && numsAux[2] != 99){ if( P(semaforo, 0) ) exit(1); printf("Escribiendo en memoria...\n\n"); nums[0] = numsAux[0]; nums[1] = numsAux[1]; nums[2] = numsAux[2]; if( V(semaforo, 1) ) exit(1); printf("Ingrese 3 numeros enteros.\n"); for( i = 0 ; i < 3 ; i++){ printf("-> "); scanf("%d", &numsAux[i]); } } shmdt(nums); shmctl(mem, IPC_RMID, 0); rmSem(semaforo); return 0; }
int setAllSem(int sem_id, int sem_qty, int value) { int i = 0; for (i = 0; i < sem_qty; i++) { setSem(sem_id, i, value); } return EXIT_SUCCESS; }