Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
read() en C
Envoyé par: Nedromi

Bonjour, alors en fait, je voudrais lire un un fichier avec l'appel système read, mais je voudrais qu'il le lise ligne par ligne.

Pour lire la première ligne,j'ais un petit truc mais je n'ais pas la condition de sortie de la boucle

char *resultat;
int id

do
{
id=open("/etc/...","O_RDONLY");
read(id,resultat,j);
}while(resultat[j] != ???)


Mais pour lire les autre lignes..... c dur. Si qq1 pourrait m'aider sa serai super.
d'avance merci.

Poste le Wednesday 2 June 2004 12:38:48
Répondre     Citer    
Re: read() en C
Envoyé par: debusy

tu peux te servir d'une structure stat. Voici l'exemple dans méthodologie du C de JP Braquelaire. Tous ses exemples sont disponibles sur le net.

#define _POSIX_C_SOURCE 1
#include <sys/stat.h>
#include <limits.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>

int
charger(char *nom, char **tampon)
{
struct stat caracteristiques;
int nombre_de_caracteres_a_lire;
int nombre_de_caracteres_par_lecture;
char *position_tampon;
int nombre_de_caracteres_deja_lus = 0;
int fd = open(nom, O_RDONLY);

if (fd == -1 || fstat(fd, &caracteristiques) == -1)
{
perror(nom);
exit(EXIT_FAILURE);
}
if (!S_ISREG(caracteristiques.st_mode))
{
fprintf(stderr, "%s n'est pas un fichier ordinaire\n", nom);
exit(EXIT_FAILURE);
}
nombre_de_caracteres_a_lire = caracteristiques.st_size;
if (nombre_de_caracteres_a_lire == 0)
return 0;

*tampon = malloc(nombre_de_caracteres_a_lire);
if (*tampon == NULL)
{
perror(NULL);
exit(EXIT_FAILURE);
}
position_tampon = *tampon;
if (nombre_de_caracteres_a_lire > SSIZE_MAX)
nombre_de_caracteres_par_lecture = SSIZE_MAX;
else
nombre_de_caracteres_par_lecture = nombre_de_caracteres_a_lire;

for (;winking smiley
{
int n = read(fd, position_tampon,
nombre_de_caracteres_par_lecture);

if (n == -1)
{
perror(nom);
exit(EXIT_FAILURE);
}
nombre_de_caracteres_deja_lus += n;
position_tampon += n;
if (nombre_de_caracteres_deja_lus == nombre_de_caracteres_a_lire)
break;
}
close(fd);
return nombre_de_caracteres_a_lire;
}


Poste le Wednesday 2 June 2004 13:07:13
Répondre     Citer    
Re: read() en C
Envoyé par: Calou

essaye fgets
il faut que tu utilises fopen ....
fais un man

Poste le Thursday 3 June 2004 08:29:20
Répondre     Citer    
Re: read() en C
Envoyé par: Nedromi

fgets permet de lire seulement la première ligne, et moi je veus lire chaque ligne a part, et chaque ligne est différente.


int id , i , j ;
char resultat [128]

id=open("/etc/...","O_RDONLY");
do
{
i = read( id , resultat , j );
} while( i != 0 );

Poste le Thursday 3 June 2004 16:51:32
Répondre     Citer    
Re: read() en C
Envoyé par: Calou

mais tu peux lire toutes les lignes de ton fichier avec fgets, je ne comprend pas ta reponse.

Poste le Friday 4 June 2004 08:30:25
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
read() en C
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons