Écriture à la fin d'un fichier avec open

aztcaLISS Messages postés 91 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 25 avril 2008 - 26 nov. 2006 à 21:48
aztcaLISS Messages postés 91 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 25 avril 2008 - 27 nov. 2006 à 14:52
Salut,

Comment je peux faire pour écrire à la fin d'un fichier sous Linux.
j'utilise la fonction
fd = open(nomfichier, O_RDWR | O_APPEND);
write(fd, "allo", sizeof("allo"));

Ca ajoute que des retours de chariots dans le fichier.
Je dois vraiment utilisé la fonction fopen car c'est dans le cadre d'un travail scolaire.

Merci

azt

12 réponses

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
26 nov. 2006 à 22:17
Pour ouvrir ton fichier utilise plutot fopen(...)
Pour positionner le pointeur en fin de flux cf fseek(...)

Shell
0
aztcaLISS Messages postés 91 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 25 avril 2008
26 nov. 2006 à 22:20
Je me suis trompé, je voulais dire que je dois vraiment utilisé la fonction open et non fopen.

azt
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
26 nov. 2006 à 22:22
La constante pour se mettre en fin de flux et SEEK_END.

Exemple:

int main()
{
    FILE * pFile;

    pFile = fopen("\home\Shell\test.txt", "r+t");

    if(pFile)
    {
        fseek(pFile, 0L, SEEK_END);
        fwrite("coucou", strlen("coucou"), 1, pFile);
        fclose(pFile);
    }

    return 0;
}

Shell
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
26 nov. 2006 à 22:25
La fonction open fait partie de quelle bibliothèque ?

Shell
0

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

Posez votre question
aztcaLISS Messages postés 91 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 25 avril 2008
26 nov. 2006 à 22:47
unistd.h

azt
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
26 nov. 2006 à 23:52
Je crois qu'a la place de fseek, tu peux utiliser lseek si tu utilises open

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
27 nov. 2006 à 13:30
// Ton open est bon
fd = open(nomfichier, O_RDWR | O_APPEND);

//ton write laisse enormement a désiré
write(fd, (const char*)"allo", sizeof(char*4))

TuRn3r
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
27 nov. 2006 à 13:35
J'aime autant son write
1) ton cast en const char* ne sert à rien
2) ton sizeof est faux, le 4 doit être sorti des parenthèses
3) c'est pas terrible de mettre 4 comme ca

Voila comment je l'écrirais pour ma part
write(fd, "allo", sizeof "allo" - 1);
-1 car sizeof "allo" vaut 5 et pas 4 (après il faut voir s'il veut écrire le 0 terminal ou pas)
_____________________________________
Un éditeur de ressources gratuit pour Windows
0
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
27 nov. 2006 à 13:53
J'aime autant son write
1) ton cast en const char* ne sert à rien
--> Dans ce cas la en effet

2) ton sizeof est faux, le 4 doit être sorti des parenthèses
--> c'est pas faux

3) c'est pas terrible de mettre 4 comme ca
--> c'est pas faux non plus, mais si ca marche alors, il pourra ensuite ecrire un truc plus propre

Voila comment je l'écrirais pour ma part
write(fd, "allo", sizeof "allo" - 1);
-1 car sizeof "allo" vaut 5 et pas 4 (après il faut voir s'il veut écrire le 0 terminal ou pas)

ton sizeof est tout aussi faux que le mien car tu as oublié les parenthèses, de plus à ce moment la, tu met

string s("allo");
write(fd,s.c_str(),s.size()+1);

TuRn3r
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
27 nov. 2006 à 14:01
On va pas se battre, sauf si tu insistes :)

Pas besoin de parenthèses après sizeof sur une variable, tu n'a qu'a essayer

int i = sizeof(char*4);
char*4 ca ne veut rien dire, en tous ca mon compilateur ne le comprend pas
Il fallait écrire int i = 4*sizeof(char)

J'ai même pris le soin de vérifier avant de te répondre
_____________________________________
Un éditeur de ressources gratuit pour Windows
0
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
27 nov. 2006 à 14:25
Je m'incline, je savais pas que sizeof "allo" dans :
write(fd, "allo", sizeof "allo" - 1);
compilait (j'ai vérifié moi aussi ), je croyais que c'était un erreur de ta part.

TuRn3r
0
aztcaLISS Messages postés 91 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 25 avril 2008
27 nov. 2006 à 14:52
Merci pour vos commentaires.

J'ai résolue le problême en mettant un retour de chariot à la fin de mon écriture et tout semble fonctionner.

azt
0
Rejoignez-nous