My Project
Chargement...
Recherche...
Aucune correspondance
init-acces-concurrent.c
Aller à la documentation de ce fichier.
1
7#include <manux/types.h>
8#include <stdio.h>
9#include <manux/errno.h>
10#include <unistd.h> // creerNouvelleTache
11#include <manux/string.h>
12
16#define TAILLE_BUFFER 16
17
21#define NB_LECTEURS 2
22#define NB_ECRIVAINS 2
23
24int fd[2]; // Le tube
25
26void lecteur()
27{
28 int r, c=0;
29 char b[TAILLE_BUFFER];
30
31 printf("[%d] Je suis un lecteur !\n", identifiantTache());
32 fermer(fd[1]);
33
34 do {
35 r = lire(fd[0], b, TAILLE_BUFFER - 1);
36 printf("[%d] lecture %d\n", identifiantTache(), r);
37 if (r > 0) {
38 b[r] = 0;
39 printf(b);
40 c += r;
41 } else if (r < 0){
42 printf("[%d] Erreur lecture\n", identifiantTache());
43 }
44 } while (r > 0);
45
46 printf("\n[%d] Fini ... En tout, j'ai lu %d !\n", identifiantTache(), c);
47}
48
50{
51 int r, c = 0;
52
53 char * b = "Bonjour les jeunes ! ";
54
55 printf("[%d] Je suis un ecrivain !\n", identifiantTache());
56 fermer(fd[0]);
57
58 do {
59 printf("[%d] Je vais ecrire %d\n", identifiantTache(), strlen(b));
60 r = ecrire(fd[1], b, strlen(b));
61 printf("[%d] Voila j'ai ecrit %d\n", identifiantTache(), r);
62 if (r >= 0) {
63 c += r;
64 } else {
65 printf("[%d] Erreur ecriture\n", identifiantTache());
66 }
67 } while (r > 0);
68
69 printf("[%d] En tout, j'ai ecrit %d !\n", identifiantTache(), c);
70
71 fermer(fd[1]);
72}
73
74void init()
75{
76 int r, l, e;
77
78 printf("Bonjour le mode utilisateur !\n");
79
80 r = tube(fd);
81
82 if ( r != ESUCCES) {
83 printf("r = %d : casse la pipe !?\n", r);
84 } else {
85 for (e = 0; e < NB_ECRIVAINS; e++) {
87 }
88 for (l = 0; l < NB_LECTEURS; l++) {
90 }
91 }
92 fermer(fd[0]);
93 fermer(fd[1]);
94 printf("Voila voila !\n");
95 while(1){};
96}
#define ESUCCES
Definition errno.h:10
int strlen(const char *s)
Definition string.c:46
#define FALSE
Definition types.h:40
void init()
#define NB_LECTEURS
Nombres de lecteurs et écrivains.
#define NB_ECRIVAINS
int fd[2]
void lecteur()
void ecrivain()
#define TAILLE_BUFFER
Taille du buffer utilisé en lecture.
uint16_t b
uint16_t c
int lire(int fd, void *buffer, int nb)
void printf(char *format,...)
Un premier printf.
Definition stdio.c:142
int fermer(int fd)
int ecrire(int fd, void *buffer, int nb)
int identifiantTache()
Obtention de l'identifiant de la tâche en cours.
int tube(int *fd)
Création d'un tube de communication.
int creerNouvelleTache(void(corps()), booleen shareCons)
Création d"une nouvelle tâche.