Detection fin de fichier en c sous linux
Fermé
hamidoo07
Messages postés
111
Date d'inscription
samedi 18 octobre 2008
Statut
Membre
Dernière intervention
28 octobre 2010
-
10 janv. 2010 à 14:13
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 10 janv. 2010 à 16:48
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 10 janv. 2010 à 16:48
A voir également:
- Detection fin de fichier en c sous linux
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier host - Guide
- Ouvrir fichier .bin - Guide
15 réponses
dubcek
Messages postés
18756
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
18 décembre 2024
5 622
10 janv. 2010 à 14:25
10 janv. 2010 à 14:25
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)
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)
hamidoo07
Messages postés
111
Date d'inscription
samedi 18 octobre 2008
Statut
Membre
Dernière intervention
28 octobre 2010
10 janv. 2010 à 14:29
10 janv. 2010 à 14:29
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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 843
10 janv. 2010 à 14:31
10 janv. 2010 à 14:31
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,
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,
hamidoo07
Messages postés
111
Date d'inscription
samedi 18 octobre 2008
Statut
Membre
Dernière intervention
28 octobre 2010
10 janv. 2010 à 14:36
10 janv. 2010 à 14:36
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
dubcek
Messages postés
18756
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
18 décembre 2024
5 622
10 janv. 2010 à 14:49
10 janv. 2010 à 14:49
utilise lseek
hamidoo07
Messages postés
111
Date d'inscription
samedi 18 octobre 2008
Statut
Membre
Dernière intervention
28 octobre 2010
10 janv. 2010 à 14:54
10 janv. 2010 à 14:54
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
je dois faire le teste de fin en gardant la même position du pointeur de fichier
dubcek
Messages postés
18756
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
18 décembre 2024
5 622
10 janv. 2010 à 14:59
10 janv. 2010 à 14:59
lseek retourne la position courante, donc tu la compares à celle en fin de fichier
hamidoo07
Messages postés
111
Date d'inscription
samedi 18 octobre 2008
Statut
Membre
Dernière intervention
28 octobre 2010
10 janv. 2010 à 15:16
10 janv. 2010 à 15:16
et comment puis je connaitre la fin de fichier pour la comparer avec lssek?
dubcek
Messages postés
18756
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
18 décembre 2024
5 622
10 janv. 2010 à 15:27
10 janv. 2010 à 15:27
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.
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.
hamidoo07
Messages postés
111
Date d'inscription
samedi 18 octobre 2008
Statut
Membre
Dernière intervention
28 octobre 2010
10 janv. 2010 à 15:33
10 janv. 2010 à 15:33
Oui merci bien pour la solution
hamidoo07
Messages postés
111
Date d'inscription
samedi 18 octobre 2008
Statut
Membre
Dernière intervention
28 octobre 2010
10 janv. 2010 à 15:51
10 janv. 2010 à 15:51
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é ?
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é ?
dubcek
Messages postés
18756
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
18 décembre 2024
5 622
10 janv. 2010 à 15:54
10 janv. 2010 à 15:54
oui, il faut d'abord sauver la position courante
hamidoo07
Messages postés
111
Date d'inscription
samedi 18 octobre 2008
Statut
Membre
Dernière intervention
28 octobre 2010
10 janv. 2010 à 15:56
10 janv. 2010 à 15:56
comment retournée a la position precedente?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 843
10 janv. 2010 à 16:48
10 janv. 2010 à 16:48
/*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
dubcek
Messages postés
18756
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
18 décembre 2024
5 622
10 janv. 2010 à 16:26
10 janv. 2010 à 16:26
off_t pos;
pos=lseek(fd,0,SEEK_CUR);
pos=lseek(fd,0,SEEK_CUR);
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 843
10 janv. 2010 à 16:40
10 janv. 2010 à 16:40
Ceci ne renverra pas à la position précédente mais laissera à la position courante.
hamidoo07
Messages postés
111
Date d'inscription
samedi 18 octobre 2008
Statut
Membre
Dernière intervention
28 octobre 2010
10 janv. 2010 à 16:29
10 janv. 2010 à 16:29
merci je vais essayer