Bonjour,
Je suis occupé à écrire un programme en C et j'ai quelques soucis avec les interactions entre les appels systèmes bloquant (ex:read et write sur des pipes) et des interruptions.
J'ai un processus maître qui attend des infos de ses fils. Les processus communiquent par pipe. Je reçoit pas mal de signaux également.
Je protège donc chaque appel à read et write afin de détecter EINTR. Si j'obtiens ce code d'erreur, je recommence.
Par exemple:
Dans les pages de man, il est indiqué que read place errno à EINTR dans le cas où aucune donnée n'a été lue.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 while((returnvalue=read(monfd[i][0],&buf,sizeof(char)*SIZE_OF_BUF)<0){ if(errno==EINTR) continue; else{ perror("read ne fonctionne pas"); exit(EXIT_FAILURE); } }
Ce que je souhaiterais savoir, c'est la façon dont se comporte read si celle-ci a commencé mais n'a pas encore lu l'entièreté de mes données.
Est-ce que je dois également vérifier si j'ai reçu le bon nombre de caractère? Si tel n'est pas le cas, comment faire pour obtenir la suite? J'ai implémenté une forme de protocole de communication et j'écris et lis uniquement des structures sur les pipes.
Merci d'avance
Partager