Exemplo n.º 1
0
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;
}
Exemplo n.º 2
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;
}
Exemplo n.º 3
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;
}