Detection fin de fichier en c sous linux

hamidoo07 Messages postés 111 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
je cherche à comment détecter si le fichier a atteint la fin, les descripteur des fichiers sont des int et pas des FILE *, alors je peux pas utiliser feof(),et j'ai essayé le casting feof((FILE*) fd) mais ca n'a pas marché
je suis sous ubuntu
merci !
A voir également:

15 réponses

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
man -s 2 read
NAME
read - read from a file descriptor
...
RETURN VALUE
On success, the number of bytes read is returned (zero indicates end of file)
0
hamidoo07 Messages postés 111 Date d'inscription   Statut Membre Dernière intervention  
 
dans l'algorithme que je dois suivre il faut détecter d'abord que la fin de fichier n'est pas atteint et apres entrer dans un bloc pour faire la lecture et d'autre instruction, alors la condition if dois se faire sur la fin de fichier
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,
Normal que le casting ne fonctionne pas. Le numéro du descripteur n'a rien à voir avec ce que renvoie fopen. Ce n'est pas le même mécanisme.
Pourquoi ne pas ouvrir le fichier avec fopen tout simplement ?
Si tu dois utiliser open, tu devras tester le caractère de fin et vérifier qu'il est différent de EOF.

Cdlt,
0
hamidoo07 Messages postés 111 Date d'inscription   Statut Membre Dernière intervention  
 
le but de ce tp que je réalise et l'utilisation des appel système open,read,write ...
et je dois creer une fonction avec comme paramètre un descripteur int et a l'intérieur de cette fonction je dois faire le test sur la fin de fichier mais sans faire de lecture
0

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

Posez votre question
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
utilise lseek
0
hamidoo07 Messages postés 111 Date d'inscription   Statut Membre Dernière intervention  
 
si lseek déplace le pointeur ca va pas marché
je dois faire le teste de fin en gardant la même position du pointeur de fichier
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
lseek retourne la position courante, donc tu la compares à celle en fin de fichier
0
hamidoo07 Messages postés 111 Date d'inscription   Statut Membre Dernière intervention  
 
et comment puis je connaitre la fin de fichier pour la comparer avec lssek?
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
position courante : lseek(fd,0,SEEK_CUR);
EOF : lseek(fd,0,SEEK_END);

SEEK_CUR
The offset is set to its current location plus offset bytes.
SEEK_END
The offset is set to the size of the file plus offset bytes.
0
hamidoo07 Messages postés 111 Date d'inscription   Statut Membre Dernière intervention  
 
Oui merci bien pour la solution
0
hamidoo07 Messages postés 111 Date d'inscription   Statut Membre Dernière intervention  
 
une question svp
est ce que lseek(fd,0,SEEK_END) deplace le pointeur de fichier???
c a d quand je ferai la comparaison lseek(fd,0,SEEK_CUR)==lseek(fd,0,SEEK_END) le pointeur sera deplacé ?
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
oui, il faut d'abord sauver la position courante
0
hamidoo07 Messages postés 111 Date d'inscription   Statut Membre Dernière intervention  
 
comment retournée a la position precedente?
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
/*pour sauvegarder la position courante*/
off_t pos=lseek(fd, (off_t)0,SEEK_CUR);

if(lseek(fd,(off_t)0,SEEK_END==pos) {
   /*on est à la fin*/
}

/*on remet à la position précédente*/
lseek(fd,pos,SEEK_SET)

Cdlt
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
off_t pos;
pos=lseek(fd,0,SEEK_CUR);
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Ceci ne renverra pas à la position précédente mais laissera à la position courante.
0
hamidoo07 Messages postés 111 Date d'inscription   Statut Membre Dernière intervention  
 
merci je vais essayer
0