Langage : C.

Plate-forme : linux version 2.6.18-92.el5 (brewbuilder@ls20-bc2-13.build.redhat.com) (gcc version 4.1.2 20071124 (Red Hat 4.1.2-41)) #1 SMP Tue Apr 29 13:16:15 EDT 2008

Compilateur : gcc (GCC) 4.1.2 20071124 (Red Hat 4.1.2-42)


Je suis actuellement en train de debbuger un programme en C qui utilise de l'IPC.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Librairies utilisées
#include <sys/poll.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/ipc.h>
 
// Programme testé 
     long lFdFichier = open("/USR/tassdt/tmp/FATI999", O_CREAT, DROIT_LIRE_ECRIRE);
     long fatTest= msgget ((ftok("/USR/tassdt/tmp/FATI999", 'a')), IPC_CREAT | DROIT_LIRE_ECRIRE );
 
     struct pollfd		DescripteurEvtFat;
     long lCrPollFat;
     DescripteurEvtFat.fd = fatTest;
     DescripteurEvtFat.events = POLLIN | POLLERR; // JBG : POLLIN    0x0001  + POLLERR   0x0008 font bien 9. /!\revents are bitmasks constructed by OR'ing a combination of the following event flags.
     DescripteurEvtFat.revents = 0;
 
     lCrPollFat = poll (&DescripteurEvtFat, 1, 10 );	// Traitement du file descripteur.
 
     fTracer ( NV_DEBUG, "JBG", ( pFicTrc, "Reception d'un message FAT lCrPollFat=%ld fd=%ld events=%d revents=%d strerrno=%s",lCrPollFat, DescripteurEvtFat.fd, DescripteurEvtFat.events, DescripteurEvtFat.revents, strerror(errno)));
Résultat dans le fichier de logs :
-------------------------------------
Code : Sélectionner tout - Visualiser dans une fenêtre à part
210312 11:35:29.141 JBG Reception d'un message FAT lCrPollFat=1 fd=560431106 events=9 revents=32 strerrno=Success
Problème :
------------
Le problème est que le champ "revents" de la structure "pollfd" est à 32 dès le départ malgré que je le force à 0, comme si il était bloqué.

Avez-vous une idée de l'origine du problème, car nous sommes presque sûrs de l'écriture de ce code ?

Jean-Baptiste.