TP3 fait, pas sur d'avoir bien compris mais voila, aussi pour le coup merci les formes de regex dans printf et scanf, on va arreter d'abuser
parent
ac236a75d7
commit
eaa98baf38
@ -1 +1,2 @@
|
|||||||
*.swp
|
*.swp
|
||||||
|
.idea/*
|
||||||
|
@ -0,0 +1,74 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#define MAX_MSG_LEN 256
|
||||||
|
#define MAX_PROC 10
|
||||||
|
|
||||||
|
int my_strlen(char *str)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
|
||||||
|
len = 0;
|
||||||
|
while (str[len] != '\0')
|
||||||
|
len++;
|
||||||
|
return (len);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
const int N = MAX_PROC;
|
||||||
|
int fd[MAX_PROC][2];
|
||||||
|
pid_t pid[MAX_PROC];
|
||||||
|
char buf[MAX_MSG_LEN];
|
||||||
|
int dest;
|
||||||
|
char msg[MAX_MSG_LEN];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while(i < N)
|
||||||
|
{
|
||||||
|
if(pipe(fd[i]) == -1)
|
||||||
|
{
|
||||||
|
perror("foirage du pipage");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
pid[i] = fork();
|
||||||
|
if (pid[i] == -1)
|
||||||
|
{
|
||||||
|
perror("foirage du forkage");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
if(pid[i] == 0)
|
||||||
|
{
|
||||||
|
close(fd[i][1]);
|
||||||
|
while(read(fd[i][0], buf, MAX_MSG_LEN) > 0)
|
||||||
|
{
|
||||||
|
printf("Processus %d a reçu: %s\n", i, buf);
|
||||||
|
}
|
||||||
|
close(fd[i][0]);
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
i = 0;
|
||||||
|
while(i < N)
|
||||||
|
{
|
||||||
|
close(fd[i][0]);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
while(scanf("%d %[^\n]", &dest, msg) != EOF)
|
||||||
|
{
|
||||||
|
if(dest >= 0 && dest < N)
|
||||||
|
{
|
||||||
|
write(fd[dest][1], msg, my_strlen(msg) + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i = 0;
|
||||||
|
while(i < N)
|
||||||
|
{
|
||||||
|
close(fd[i][1]);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in new issue