int main(int argc, char *argv[]) { int i; int tmp; int nb_fils; int fd; int *sp; tmp=0; if(argc < 2){ printf("missing arg"); } srand(time(NULL)); nb_fils = atoi(argv[1]); if ((fd = shm_open("/remonte_posix_partagee.c", O_RDWR|O_CREAT,0600)) == -1) { perror("shm_open"); exit(1); } if (ftruncate(fd, nb_fils*sizeof(int)) == -1) { perror("ftruncate"); exit(1); } if((sp = mmap(NULL, sizeof(int), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0))== MAP_FAILED) { perror("mmap"); exit(1); } remonte_ipc(nb_fils, sp); for (i=0; i<nb_fils; i++) tmp += *sp++; shm_unlink("/remonte_posix_partagee.c"); printf("somme alea: %d\n", tmp); return 0; }
int main(int argc, char *argv[]) { int i; int tmp; int nb_fils; key_t cle; int shm_id; int *p_int; int *adr_att; int taille; tmp=0; if(argc < 2){ printf("missing arg"); } srand(time(NULL)); nb_fils = atoi(argv[1]); taille = nb_fils*sizeof(int); cle = ftok("remonte_partagee.c" , getpid() & 0xFF); shm_id = shmget(cle, taille, 0666 | IPC_CREAT); adr_att = shmat(shm_id, 0, 0600); p_int = (int *)adr_att; remonte_ipc(nb_fils, p_int); p_int = (int *)adr_att; for (i=0; i<nb_fils; i++) tmp += *p_int++; shmdt(adr_att); shmctl(shm_id, IPC_RMID, (struct shmid_ds *) NULL); printf("somme alea: %d\n", tmp); return 0; }
int main(int argc, char **argv) { int nb_fils, msg_id_pere; key_t cle; /* Nombre d'arguments invalide */ if (argc != 2) { printf("Usage : ./remonte_ipc nb_fils\n"); return EXIT_FAILURE; } /* Nombre de fils invalide */ nb_fils = atoi(argv[1]); if (!nb_fils) { printf("nb_fils doit être un nombre strictement positif.\n"); return EXIT_FAILURE; } /* Création clé = (nom du programme, 8 LSB du pid) */ if ((cle = ftok(argv[0], getpid() & 0xFF)) == -1) { perror("Erreur ftok.\n"); return EXIT_FAILURE; } /* Création ID de la file MQN */ if ((msg_id_pere = msgget(cle, 0666 | IPC_CREAT)) == -1) { perror("Erreur msgget.\n"); return EXIT_FAILURE; } remonte_ipc(nb_fils, msg_id_pere, argv[0]); /* On libère la file MQN */ if (msgctl(msg_id_pere, IPC_RMID, NULL) == -1) { perror("Erreur msgctl.\n"); return EXIT_FAILURE; } return EXIT_SUCCESS; }