Les appels systemes en C

Résolu
info_nadia Messages postés 15 Date d'inscription   Statut Membre Dernière intervention   -  
info_nadia Messages postés 15 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour
j'ai un exercice qui demande d'ecrire un programme en C qui accepte un nombr arbitraire de nom de fichiers comme parametres,ouvre les fichiers,compte le nombre de leurs caracteres,et affiche les noms des fichiers et leurs tailles (exprimes en nombre de caracteres) respectives sur la sortie standard.le programme doit traiter les erreurs dues à l'ouverture des fichiers et affiche les messages d'erreur adéquats.
Mon problem est lors de la phase de compilation il m'affiche au maximum le nom et la taille de deux fichiers seulement. voila mon code source et j'espere que vous m'aider à resoudre ce probleme.

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#define w 1024
int main(int argc,char * argv[]){
int fd, nb;
char buf;
int i=1;
if (argc==1) printf("manque d'arguments\n");
else{
while (argv[i]!=NULL){
fd=open(argv[i],O_RDONLY);
if (fd==-1) printf("le fichier %s n'existe pas",argv[i]);
printf("==> le nom du fichier est: %s\n",argv[i]);
while ((nb=read(fd,&buf,w))>0)
printf(" sa taille est : %d caracteres\n",nb);
printf("\n");
close(fd);
i++;
}
}

}



}

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Plutôt que de faire une boucle while(argv[i]!=NULL) sers toi de for(i=1;i<argc;i++)
0
info_nadia Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai ce vous m'avez dit et ca m'afficher tous les fichiers mais le problem ce que si le premier fichier est de taille 37 caracteres il continu pas d'afficher les autres.donc je ne sais pas ou est le problem exact
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Il faut que tu définisses buf comme un tableau de taille w, sinon tu vas avoir des problèmes au niveau de la mémoire lorsque tu manipules read avec &buf (qui est un char !!!)

char buf[w];

while ((nb=read(fd,buf,w))>0)
    printf("Un bloc de taille : %d\n",nb);
0
info_nadia Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 
Merciiiiiiiiiiiiiiiiiiiiiiii j'ai reussi à executer .mille merci c gentil.
0