A voir également:
- Lecture aléatoire des caractères d'un fichier
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
5 réponses
je voudrais faire ressortir dans une variable des caractères lus aléatoirement dans un fichier contenant ces caractères dans un certain ordre.
j'ai beau réfléchi ,je trouve pas comment je pourrais faire.
pouvez vous me secourir svp??
merci
j'ai beau réfléchi ,je trouve pas comment je pourrais faire.
pouvez vous me secourir svp??
merci
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/msg.h>
#include <errno.h>
#include <fcntl.h> /*O_RDONLY*/
#define TAILLE_MESSAGE 256 /* Correspond à la taille de la chaîne à écrire */
int main(void)
{
pid_t pid_fils;
int fd1;char c;
/* lecture du fichier composant.txt */
fd1=open ("composant.txt",O_RDONLY,0);
read(fd1,&c,1);
printf("c=%c\n",c);
int descripteurTube[2];
char messageEcrire[TAILLE_MESSAGE];
pipe(descripteurTube);
pid_fils = fork();
if(pid_fils != 0) /* Processus père */
{
sprintf(messageEcrire,"(c)" ); /* La fonction sprintf permet de remplir une chaîne de caractère avec un texte donné */
write(descripteurTube[1], messageEcrire, TAILLE_MESSAGE);
}
return EXIT_SUCCESS;
}
ce code ne lit que la premiere lettre du fichier composant
moi je voudrais faire lire de façon alternative plus d'un élément
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/msg.h>
#include <errno.h>
#include <fcntl.h> /*O_RDONLY*/
#define TAILLE_MESSAGE 256 /* Correspond à la taille de la chaîne à écrire */
int main(void)
{
pid_t pid_fils;
int fd1;char c;
/* lecture du fichier composant.txt */
fd1=open ("composant.txt",O_RDONLY,0);
read(fd1,&c,1);
printf("c=%c\n",c);
int descripteurTube[2];
char messageEcrire[TAILLE_MESSAGE];
pipe(descripteurTube);
pid_fils = fork();
if(pid_fils != 0) /* Processus père */
{
sprintf(messageEcrire,"(c)" ); /* La fonction sprintf permet de remplir une chaîne de caractère avec un texte donné */
write(descripteurTube[1], messageEcrire, TAILLE_MESSAGE);
}
return EXIT_SUCCESS;
}
ce code ne lit que la premiere lettre du fichier composant
moi je voudrais faire lire de façon alternative plus d'un élément
Salut dingue,
Une approche raisonnable serait de :
1- déterminer la taille de ton fichier, exemple (taille_fich) et le nombre de caractères à afficher (car_max, qui devra être au moins égal à taille_fich sans les retours à la ligne...), et mettre à zéro un compteur de caractères (compteur)
2- allouer un espace mémoire suffisant pour accueillir les données qu'il contient (tampon)
3- lire les données qu'il contient dans cet espace
4- tirer au sort un nombre entre 0 et taille_fich-1
5- afficher le caractère dans tampon à cet endroit sauf si c'est un \n
6- si c'est un \n, revenir à 4
7- sinon incrémenter compteur, et mettre le caractère dans tampon à cet endroit à \n (cela te permettra de savoir que celui-là n'est plus affichable)
8- si le compteur est égal à car_max, on a terminé
9- sinon, on boucle sur 4
Par rapport à ton code que tu postes là...
Pour lire plus d'un caractère, tu dois ... lire plus d'un caractère.
Si en 3ème argument de read tu mets 1, tu n'en lira pas plus.
man 2 read
Bien sûr, en 2ème argument tu devra mettre le tampon évoqué ci-dessus.
Il y a une raison pour laquelle tu utilises des fonctions POSIX open et read au lieu des fonctions standard du C fopen et fread ?
Par ailleurs, je ne comprends pas pourquoi tu pipe() ou fork(), et
Dal
Une approche raisonnable serait de :
1- déterminer la taille de ton fichier, exemple (taille_fich) et le nombre de caractères à afficher (car_max, qui devra être au moins égal à taille_fich sans les retours à la ligne...), et mettre à zéro un compteur de caractères (compteur)
2- allouer un espace mémoire suffisant pour accueillir les données qu'il contient (tampon)
3- lire les données qu'il contient dans cet espace
4- tirer au sort un nombre entre 0 et taille_fich-1
5- afficher le caractère dans tampon à cet endroit sauf si c'est un \n
6- si c'est un \n, revenir à 4
7- sinon incrémenter compteur, et mettre le caractère dans tampon à cet endroit à \n (cela te permettra de savoir que celui-là n'est plus affichable)
8- si le compteur est égal à car_max, on a terminé
9- sinon, on boucle sur 4
Par rapport à ton code que tu postes là...
Pour lire plus d'un caractère, tu dois ... lire plus d'un caractère.
Si en 3ème argument de read tu mets 1, tu n'en lira pas plus.
man 2 read
Bien sûr, en 2ème argument tu devra mettre le tampon évoqué ci-dessus.
Il y a une raison pour laquelle tu utilises des fonctions POSIX open et read au lieu des fonctions standard du C fopen et fread ?
Par ailleurs, je ne comprends pas pourquoi tu pipe() ou fork(), et
sprintf(messageEcrire,"(c)" );va juste écrire dans ton tampon "(c)", et non pas ce que tu as récupéré.
Dal
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question