Les appels systemes en C

Résolu/Fermé
info_nadia Messages postés 15 Date d'inscription vendredi 4 novembre 2011 Statut Membre Dernière intervention 9 mai 2012 - 5 nov. 2011 à 12:46
info_nadia Messages postés 15 Date d'inscription vendredi 4 novembre 2011 Statut Membre Dernière intervention 9 mai 2012 - 6 nov. 2011 à 18:07
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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
5 nov. 2011 à 14:13
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 vendredi 4 novembre 2011 Statut Membre Dernière intervention 9 mai 2012
6 nov. 2011 à 14:05
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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
6 nov. 2011 à 14:31
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 vendredi 4 novembre 2011 Statut Membre Dernière intervention 9 mai 2012
6 nov. 2011 à 18:07
Merciiiiiiiiiiiiiiiiiiiiiiii j'ai reussi à executer .mille merci c gentil.
0