écrire dans un fichier texte
Linquisiteur
-
Linquisiteur -
Linquisiteur -
Bonjour, je suis débutant en c et j'essaye de créé des forks qui écrivent dans un fichier. Il s'agit d'une toute nouvelle matière assez difficile et malgré que j'ai lu plusieurs fois la théorie Je n'arrive pas à créé ce programme....
Voila la liste des erreurs autant dire que bien que j'y ai regarder je n'ai pas sur les corriger..:
Merci d'avance si vous pouvez m'aiguillez vers la voit de la connaissance :)
#include <stdio.h> #include <stdlib.h> #include <sys/wait.h> #include <unistd.h> #include <sys/types.h> #include <string.h> #include <fcntl.h> #define fichiertexte "texte.txt" int cpt = 0; while (cpt < 3) //boucle qui créé les 3 fils { pid_t a = fork(); if (a < 0) //si le fils à planter { perror ("le fork a rate\n"); exit(EXIT_FAILURE); } if (a == 0) //si le fils a été créé { printf ("ecrire dans le fichier texte\n"); if ((fichier = fopen(texte,"w"))==NULL) { perror("Write "); exit(1); fprintf(fichier,""Je suis le fils de pid %d, a vaut %d, mon pere est %d \n", getpid(), a, getppid());); } exit(0); } cpt++; //on termine la boucle quand on atteint 3 fils } for(cpt=0;cpt<nb;cpt++) wait(0); // on termine tout les processus exit(EXIT_SUCCESS);
Voila la liste des erreurs autant dire que bien que j'y ai regarder je n'ai pas sur les corriger..:
bash-2.05$ gcc exo_fichier1.c -o exo_fichier exo_fichier1.c:13: error: parse error before "while" exo_fichier1.c:19: error: parse error before numeric constant exo_fichier1.c:19: error: conflicting types for 'exit' /usr/local/lib/gcc-lib/sparc-sun-solaris2.9/3.3.2/include/iso/stdlib_iso.h:113: error: previous declaration of 'exit' exo_fichier1.c:19: warning: data definition has no type or storage class exo_fichier1.c:26: error: parse error before numeric constant exo_fichier1.c:26: warning: data definition has no type or storage class exo_fichier1.c:28: error: parse error before string constant exo_fichier1.c:28: error: stray '\' in program exo_fichier1.c:28:82: missing terminating " character exo_fichier1.c:31: warning: conflicting types for built-in function 'fprintf' exo_fichier1.c:31: warning: data definition has no type or storage class exo_fichier1.c:36: error: parse error before numeric constant exo_fichier1.c:36: warning: data definition has no type or storage class exo_fichier1.c:36:26: warning: no newline at end of file
Merci d'avance si vous pouvez m'aiguillez vers la voit de la connaissance :)
A voir également:
- écrire dans un fichier texte
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
2 réponses
Non pour le moment je souhaite juste écrire dans un fichier texte. Ensuite je tenterais de progresser en fessant un calcul avec des sémaphore,.. mais je suis à l'aise avec les séma tandis que les fichiers ces que du neuf
Je veux juste aller me pendre... --'
merci de me faire remarquer que j'ai complétement zapper de mettre le main...
Bon j'ai enfin pu comprendre les erreurs enfin pas tous mais j'ai pas mal corriger.. Je ne sais pas comment j'ai pas vu pour mon main, c'est tellement stupide que j'y ai même pas regarder..
merci de me faire remarquer que j'ai complétement zapper de mettre le main...
Bon j'ai enfin pu comprendre les erreurs enfin pas tous mais j'ai pas mal corriger.. Je ne sais pas comment j'ai pas vu pour mon main, c'est tellement stupide que j'y ai même pas regarder..
#include <stdio.h> #include <stdlib.h> #include <sys/wait.h> #include <unistd.h> #include <sys/types.h> #include <string.h> #include <fcntl.h> #define fichiertexte "texte.txt" int main (int argc, char * argv[]){ FILE * texte; int cpt = 0; while (cpt < 3) //boucle qui créé les 3 fils { pid_t a = fork(); if (a < 0) //si le fils à planter { perror ("le fork a rate\n"); exit(EXIT_FAILURE); } if (a == 0) //si le fils a été créé { printf ("ecrire dans le fichier texte\n"); if ((texte = fopen(texte,"w"))==NULL) { perror("Write "); exit(1); fprintf(texte,""Je suis le fils de pid %d, a vaut %d, mon pere est %d \n", getpid(), a, getppid());); } exit(0); } cpt++; //on termine la boucle quand on atteint 3 fils } for(cpt=0;cpt<3;cpt++) wait(0); // on termine tout les processus exit(EXIT_SUCCESS); }
exo_fichier1.c: In function 'main': exo_fichier1.c:25: warning: passing arg 1 of 'fopen' from incompatible pointer type exo_fichier1.c:29: error: parse error before "Je" exo_fichier1.c:29: error: stray '\' in program exo_fichier1.c:29:80: missing terminating " character exo_fichier1.c:38: error: parse error at end of input
texte = fopen(texte,"w")
Ne veux-tu pas mettre plutôt fichiertexte ?
""Je suis
Tu as mis 2 guillemets.
fprintf(texte,""Je suis le fils de pid %d, a vaut %d, mon pere est %d \n", getpid(), a, getppid()););
Tu as );); à la fin. Le premier ferme fprintf(). Le second est donc à supprimer.
exit(EXIT_SUCCESS);
Un main() se termine par return EXIT_SUCCESS; ou return 0; Pas de exit().
Ne veux-tu pas mettre plutôt fichiertexte ?
""Je suis
Tu as mis 2 guillemets.
fprintf(texte,""Je suis le fils de pid %d, a vaut %d, mon pere est %d \n", getpid(), a, getppid()););
Tu as );); à la fin. Le premier ferme fprintf(). Le second est donc à supprimer.
exit(EXIT_SUCCESS);
Un main() se termine par return EXIT_SUCCESS; ou return 0; Pas de exit().
encore merci. Je me rend compte que je n'aurais pas du travailler quand je suis et fatigué et que j'ai bu avec des amis.. Je me rend compte que maintenant de mes erreurs..
Tu ma fais diminuer énormément mon paquet d'erreur mais pourquoi je devrais mettre fichiertexte? Je part sur un exemple d'un autre code donc en gros que je comprend même pas ce que j'écris malgré que j'ai lu la théorie.
Bon voila j'ai modifier encore qq petite chose en essayant de bien comprendre. Sa compile mais je n'ai rien qui s'écrit dans le fichier: "fichier.txt"
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>
#include <fcntl.h>
#define fichiertexte "texte.txt"
FILE * fichier;
int main (int argc, char * argv[]){
FILE * texte;
int cpt = 0;
while (cpt < 3) //boucle qui créé les 3 fils
{
pid_t a = fork();
if (a < 0) //si le fils à planter
{
perror ("le fork a rate\n");
exit(EXIT_FAILURE);
}
if (a == 0) //si le fils a été créé
{
printf ("ecrire dans le fichier texte\n");
if ((fichier = fopen(fichiertexte,"w"))==NULL) {
perror("Write ");
exit(1);
fprintf(texte,"Je suis le fils de pid %d, a vaut %d, mon pere est %d \n", getpid(), a, getppid());
}
exit(0);
}
cpt++; //on termine la boucle quand on atteint 3 fils
}
for(cpt=0;cpt<3;cpt++) wait(0); // on termine tout les processus
EXIT_SUCCESS;
}
bash-2.05$ gcc exo_fichier1.c -o exo_fichier
bash-2.05$ exo_fichier
ecrire dans le fichier texte
ecrire dans le fichier texte
ecrire dans le fichier texte
Pourtant je vois que je passe dans tout les fork.. malgré cela mon fichier texte est vide
Tu ma fais diminuer énormément mon paquet d'erreur mais pourquoi je devrais mettre fichiertexte? Je part sur un exemple d'un autre code donc en gros que je comprend même pas ce que j'écris malgré que j'ai lu la théorie.
Bon voila j'ai modifier encore qq petite chose en essayant de bien comprendre. Sa compile mais je n'ai rien qui s'écrit dans le fichier: "fichier.txt"
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>
#include <fcntl.h>
#define fichiertexte "texte.txt"
FILE * fichier;
int main (int argc, char * argv[]){
FILE * texte;
int cpt = 0;
while (cpt < 3) //boucle qui créé les 3 fils
{
pid_t a = fork();
if (a < 0) //si le fils à planter
{
perror ("le fork a rate\n");
exit(EXIT_FAILURE);
}
if (a == 0) //si le fils a été créé
{
printf ("ecrire dans le fichier texte\n");
if ((fichier = fopen(fichiertexte,"w"))==NULL) {
perror("Write ");
exit(1);
fprintf(texte,"Je suis le fils de pid %d, a vaut %d, mon pere est %d \n", getpid(), a, getppid());
}
exit(0);
}
cpt++; //on termine la boucle quand on atteint 3 fils
}
for(cpt=0;cpt<3;cpt++) wait(0); // on termine tout les processus
EXIT_SUCCESS;
}
bash-2.05$ gcc exo_fichier1.c -o exo_fichier
bash-2.05$ exo_fichier
ecrire dans le fichier texte
ecrire dans le fichier texte
ecrire dans le fichier texte
Pourtant je vois que je passe dans tout les fork.. malgré cela mon fichier texte est vide
mais pourquoi je devrais mettre fichiertexte?
Ben, dans fopen(), on met en 1ère argument le nom du fichier dans lequel on veut écrire ou lire.
Tu as mis en début de code : #define fichiertexte "texte.txt"
Donc, en mettant fichier=fopen(fichiertexte,"w"); tu tenteras d'écrire dans "texte.txt". La variable fichier te permettra d'écrire dans fichiertexte soit "texte.txt".
Je ne vois toujours pas de return EXIT_SUCCESS; dans ton code... Tu as mis simplement EXIT_SUCCESS, ça ne veut pas dire grand chose.
fprintf(texte,"Je suis le fils de pid %d, a vaut %d, mon pere est %d \n", getpid(), a, getppid());
Tu écris sur le pointeur texte qui pointe sur rien... Il faut mettre : fprintf(fichier,...) c'est fichier qui pointe sur le fichier fichiertexte.
N'oublie pas non plus, fclose(fichier); Ouvrir un fichier c'est bien le refermer c'est mieux !
Et enfin, n'utilise pas le bouton "souligné" pour poster un code. C'est désagréable à lire. Utilise comme tu faisais au début (bouton code, à droite de "souligné"). Merci d'avance pour mes yeux :-).
Ben, dans fopen(), on met en 1ère argument le nom du fichier dans lequel on veut écrire ou lire.
Tu as mis en début de code : #define fichiertexte "texte.txt"
Donc, en mettant fichier=fopen(fichiertexte,"w"); tu tenteras d'écrire dans "texte.txt". La variable fichier te permettra d'écrire dans fichiertexte soit "texte.txt".
Je ne vois toujours pas de return EXIT_SUCCESS; dans ton code... Tu as mis simplement EXIT_SUCCESS, ça ne veut pas dire grand chose.
fprintf(texte,"Je suis le fils de pid %d, a vaut %d, mon pere est %d \n", getpid(), a, getppid());
Tu écris sur le pointeur texte qui pointe sur rien... Il faut mettre : fprintf(fichier,...) c'est fichier qui pointe sur le fichier fichiertexte.
N'oublie pas non plus, fclose(fichier); Ouvrir un fichier c'est bien le refermer c'est mieux !
Et enfin, n'utilise pas le bouton "souligné" pour poster un code. C'est désagréable à lire. Utilise comme tu faisais au début (bouton code, à droite de "souligné"). Merci d'avance pour mes yeux :-).