17#include <manux/errno.h>
20#include <manux/string.h>
29#define MANUX_TUBE_NB_PAGES 1
31#define MANUX_TUBE_CAPACITE (MANUX_TAILLE_PAGE * MANUX_TUBE_NB_PAGES)
33#define MIN(a, b) (((a) < (b)) ? (a) : (b))
95 if (
tube->nbEcrivains == 0) {
109size_t tubeEcrire(
Fichier * f,
void * buffer,
size_t nbOctets)
150 if (nbOctetsEcrits > 0) {
158 return nbOctetsEcrits;
162size_t tubeLire(
Fichier * f,
void * buffer,
size_t nbOctets)
184 while ((
tube->taille == 0) && (
tube->nbEcrivains > 0)) {
200 n =
MIN(nbOctets - nbOctetsLus,
tube->taille);
209 memcpy(buffer,
tube->donnees + indicePremier, n);
234 .fermer = tubeFermer,
235 .ecrire = tubeEcrire,
239#ifdef MANUX_APPELS_SYSTEME
269 tube->indiceProchain = 0;
279 fichiers[0] = fichierCreer(iNoeud,
O_RDONLY, 0);
282 fichiers[1] = fichierCreer(iNoeud,
O_WRONLY, 0);
285 if (tacheAjouterFichiers(
tacheEnCours, 2, fichiers, fds) != 2 ) {
void conditionAttendre(Condition *cond, ExclusionMutuelle *em)
Attente de la prochaine occurence d'une condition.
void conditionInitialiser(Condition *cond)
Initialisation d'une condition.
void conditionSignaler(Condition *cond)
Signaler une occurence d'une condition à une tâche en attente.
void conditionDiffuser(Condition *cond)
Signaler une occurence d'une condition à toutes les tâches en attente.
Définition des exlusions mutuelles.
void exclusionMutuelleEntrer(ExclusionMutuelle *em)
Entrée en exclusion mutuelle.
void exclusionMutuelleInitialiser(ExclusionMutuelle *em)
Initialisation d'une exclusion mutuelle.
void exclusionMutuelleSortir(ExclusionMutuelle *em)
#define O_RDONLY
Les différents fanions.
typedef void(Handler(void))
void * memcpy(void *dest, const void *src, size_t n)
INoeud * iNoeudCreer(void *prive, MethodesFichier *methodesFichier)
: Création d'un INoeud
void * kmalloc(size_t n)
Allocation d'une zone de n octets.
#define printk_debug(lvl, fmt, args...)
Tache * tacheEnCours
: L'identification de la tâche en cours
void ordonnanceur(void)
Basculer vers la prochaine tache à exécuter.
Définition des exclusions mutuelles.
: Qu'est-ce qu'un fichier ouvert du point de vue du noyau ?
INoeud * iNoeud
Caractérisation de la structure.
void * prive
Caractérisation du fichier ouvert.
uint16_t fanions
O_RDONLY, O_NONBLOCK, O_SYNC.
: Un INoeud représente un fichier, d'un point de vue statique Il s'agit donc de la description d'un f...
: Définition des opérations réalisables sur un fichier
int(* ouvrir)(INoeud *iNoeud, Fichier *f, uint16_t fanions, uint16_t mode)
Définition des conditions.
ExclusionMutuelle exclusionMutuelle
Condition nouvellesDonnees
MethodesFichier tubeMethodesFichier
Déclaration des méthodes permettant de traiter un tube comme un fichier.
#define MANUX_TUBE_CAPACITE
struct _tube Tube
: Définition d'un tube
int tube(int *fd)
Création d'un tube de communication.