Se mettre en attente de donnees sur un fichier en C

puxware Messages postés 3 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 13 août 2004 - 13 août 2004 à 15:58
sebwol Messages postés 4 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 16 août 2004 - 16 août 2004 à 09:07
Salut,

Voila mon probleme :

Au lieu de lire à intervalles régulier mon fichier, je voudrais (en C) me mettre en attente et déclencher la lecture lorsque des données sont ajoutées dans un fichier.

J'ai essayé avec select, celui-ci ne se bloque jamais. Il renvoie toujours que le fd du fichier à bouger sans pour autant qu'il y ait de données supplémentaires dans le fichier (fin de fichier).

Quelqu'un a-t-il une solution ?

Merci d'avance

A+

6 réponses

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
13 août 2004 à 16:48
tu peux faire des

fseek( f, 0, SEEK_END );
end = ftell(f);

tant que end ne change pas
0
puxware Messages postés 3 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 13 août 2004
13 août 2004 à 16:59
en faisant :
fseek( f, 0, SEEK_END );
end = ftell(f);

je vais devoir boucler !!!

Comment se fait-il que le select ne se bloque pas ?
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
13 août 2004 à 17:00
select est bloquant aussi ?
0
moktin Messages postés 8 Date d'inscription jeudi 12 août 2004 Statut Membre Dernière intervention 5 octobre 2004
13 août 2004 à 18:31
hum tu peux montrer un bout de code voir ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sebwol Messages postés 4 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 16 août 2004
16 août 2004 à 09:06
Voici le code. le fileDescriptor descriptor en entree pointe sur un fichier texte tel que celui en pièce jointe.

La fonction lit les lignes contenue dans le fichier.
Lorsque la fin de fichier est atteinte. Le select ne se bloque pas en attente la fonction read renvoie 0 octet lu.

Merci d'avance pour votre aide.

short surveillerFileDescriptor( int fileDescriptor )
{

short codeRetour ;
int retourSelect;
fd_set ensembleFd;
ssize_t nbOctetLu;
char bufferRead[256+1];


codeRetour=ZKC_BNP_GEN_OK;
retourSelect=0;
FD_ZERO(&zl_ensembleFd);
nbOctetLu=0;
memset(zl_bufferRead,NULL,sizeof(zl_buffer));


FD_SET(fileDescriptor,&ensembleFd);

while(1)
{
/*On se met indefiniment en attente de donnees sur le file descripteur*/
retourSelect=select(FD_SETSIZE,&ensembleFd,NULL,NULL,NULL);

if (retourSelect<0)
{
/*erreur*/
/*...*/
}
else if(retourSelect==0)
{
/*delai depasse*/
/*...*/
}
else
{
/*OK On lit*/
do
{
nbOctetLu=read(fileDescriptor,bufferRead,sizeof(zl_buffer));

if (nbOctetLu>0)
{
/*Traitement*/
}

}
while(OctetLu>0);
}
}
return(codeRetour);
}
0
sebwol Messages postés 4 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 16 août 2004
16 août 2004 à 09:07
J'ai oublié le fichier est du type :

dksqpodjsqpodjsqd
dqsndojqspdihsqd
dsqjdpkqsjdsqdsqdsqdsqd
0
Rejoignez-nous