Écriture à la fin d'un fichier avec open

Signaler
Messages postés
91
Date d'inscription
samedi 3 mai 2003
Statut
Membre
Dernière intervention
25 avril 2008
-
Messages postés
91
Date d'inscription
samedi 3 mai 2003
Statut
Membre
Dernière intervention
25 avril 2008
-
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

Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Pour ouvrir ton fichier utilise plutot fopen(...)
Pour positionner le pointeur en fin de flux cf fseek(...)

Shell
Messages postés
91
Date d'inscription
samedi 3 mai 2003
Statut
Membre
Dernière intervention
25 avril 2008

Je me suis trompé, je voulais dire que je dois vraiment utilisé la fonction open et non fopen.

azt
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
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
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
La fonction open fait partie de quelle bibliothèque ?

Shell
Messages postés
91
Date d'inscription
samedi 3 mai 2003
Statut
Membre
Dernière intervention
25 avril 2008

unistd.h

azt
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Je crois qu'a la place de fseek, tu peux utiliser lseek si tu utilises open

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
// 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
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
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
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
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
Messages postés
91
Date d'inscription
samedi 3 mai 2003
Statut
Membre
Dernière intervention
25 avril 2008

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