Nantes Université

Skip to content
Extraits de code Groupes Projets
Vérifiée Valider b1a4412c rédigé par Leo LEMAIRE's avatar Leo LEMAIRE
Parcourir les fichiers

squelette

parent
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
cheval
*.o
\ No newline at end of file
CC = gcc
CFLAGS = -Wall
cheval: main.o user.o
$(CC) -o cheval main.o user.o
clean:
rm *.o
rm cheval
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "user.h"
#define NB_USERS 4
#define NB_CHEVALS 4
int main(int argc, char ** argv){
user_t users[NB_USERS];
int pipes[2];
int pipes_b[2], o_pipes_b[2];
if(pipe(pipes_b)){
fprintf(stderr, "erreur de creation du pipe principal");
exit(0);
}
pipes[1] = pipes_b[1];
o_pipes_b[0] = pipes_b[0];
for(int i=0; i<NB_USERS; i++){
o_pipes_b[0] = pipes_b[0];
if(pipe(pipes_b)){
fprintf(stderr, "erreur de creation de pipe");
exit(-1);
}
switch(fork()){
case -1:
fprintf(stderr, "Erreur lors du fork");
exit(-1);
break;
case 0:
;
int p[2];
p[0] = o_pipes_b[0]; // pipe de sortie du fils précedent
p[1] = pipes_b[1]; // pipe d'entree du fils suivant
user_t user = user_init(i, NB_CHEVALS, p);
while(1) user_loop(user);
break;
}
}
pipes[0] = pipes_b[0];
int in = 12;
write(pipes[1], &in, sizeof(int));
int out;
read(pipes[0], &out, sizeof(int));
printf("master %d\n", out);
}
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "user.h"
user_t user_init(unsigned int id, unsigned int nb_cheval, int pipes[]){
cheval_t chevals[nb_cheval];
user_t out = {
.id = id,
.c = chevals,
.nb_chevals = nb_cheval,
.pipes = pipes,
};
return out;
}
void user_loop(user_t user){
int out;
read(user.pipes[0], &out, sizeof(int));
printf("I'm user %d : %d \n", user.id, out);
out++;
write(user.pipes[1], &out, sizeof(int));
}
\ No newline at end of file
typedef struct {
int pos;
int escalier; // si le cheval est dans l'escalier
} cheval_t;
typedef struct {
unsigned int id;
cheval_t* c;
unsigned char nb_chevals;
int* pipes;
} user_t;
user_t user_init(unsigned int id, unsigned int nb_cheval, int pipes[]);
void user_loop(user_t user);
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter