Probleme avec chdir en C

Résolu/Fermé
Jofroy Messages postés 81 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 10 octobre 2017 - Modifié par Jofroy le 17/03/2017 à 09:10
Jofroy Messages postés 81 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 10 octobre 2017 - 17 mars 2017 à 11:17
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.
A voir également:

1 réponse

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 17/03/2017 à 10:15
Salut,

Le
read()
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
0
Jofroy Messages postés 81 Date d'inscription mercredi 30 juin 2010 Statut Membre Dernière intervention 10 octobre 2017 9
17 mars 2017 à 11:17
Je te remercie beaucoup Dal de m'avoir repondu , ça fonctionne nickel ; c'est une partie de mon TP qui m'a bien bloqué .
Merci beaucoup encore
0