Probleme avec chdir en C
Résolu
Jofroy
Messages postés
100
Statut
Membre
-
Jofroy Messages postés 100 Statut Membre -
Jofroy Messages postés 100 Statut Membre -
Bonjour ,
J'ai besoin de votre aide s'il vout plait pour la fonction chdir , quand je saisie sur l'entrée standard "directory" déjà créé dans le même repertoire que mon programme , rep me retourne -1 ; par contre quand je fais : int rep=chdir("directory"); ça fonctionne , rep me retourne 0 ; je ne comprends pas .
J'ai vérifié les droits d'accès :
drwxrwxr-x 2 ubuntu ubuntu 4096 mars 17 08:33 directory
Voici mon code :
int main(int argc, char* argv[]){
char buffer[1024];
read(0,buffer,1024);
int rep;
int rep=chdir(buffer);
printf("%d\n",rep);
}
Merci d'avance.
J'ai besoin de votre aide s'il vout plait pour la fonction chdir , quand je saisie sur l'entrée standard "directory" déjà créé dans le même repertoire que mon programme , rep me retourne -1 ; par contre quand je fais : int rep=chdir("directory"); ça fonctionne , rep me retourne 0 ; je ne comprends pas .
J'ai vérifié les droits d'accès :
drwxrwxr-x 2 ubuntu ubuntu 4096 mars 17 08:33 directory
Voici mon code :
int main(int argc, char* argv[]){
char buffer[1024];
read(0,buffer,1024);
int rep;
int rep=chdir(buffer);
printf("%d\n",rep);
}
Merci d'avance.
1 réponse
-
Salut,
Leread()
POSIX se contente de lire le contenu accédé par le descripteur et ne termine pas la chaîne avec '\0'. C'est à toi de le faire, par rapport au nombre de char lus, sinon tu passes à chdir une chaîne non terminée.
Par exemple :#include <stdio.h> #include <unistd.h> int main(int argc, char* argv[]){ char buffer[1024]; ssize_t n = read(0,buffer,1024); if ((n > 0) && (buffer[n-1] == '\n')) { buffer[n-1] = '\0'; } else { printf("Erreur de lecture ou buffer trop petit\n"); return 1; } printf("buffer = %s\n", buffer); int rep=chdir(buffer); printf("%d\n",rep); return 0; }
Tu pourrais, au lieu de cela, utiliser scanf ou fgets (en retirant '\n'), puisque de toutes façons tu utilises stdio.h.
Dal