Fonction CHDR dans le langage C

Fonction CHDR dans le langage C
La configuration d'un répertoire fonctionnel à partir du répertoire racine Linux ouvre la possibilité d'accéder et de travailler sur l'ensemble de la structure de fichiers dans les différents dossiers du système et des utilisateurs.

Dans ce Indice de linux Article, vous apprendrez à créer un répertoire de travail en utilisant le chdir () fonction.

Nous expliquerons le fonctionnement théorique de cette fonction, sa syntaxe, les types d'arguments d'entrée et de sortie et le type de données que chacun de ces arguments prend. Ensuite, nous examinerons une description sur la façon dont le chdir () fonctionne et les en-têtes nécessaires pour utiliser cette fonction.

Pour utiliser cette fonction dans la pratique, nous appliquerons tout ce que nous avons appris dans un exemple pratique où vous apprenez le processus étape par étape sur la façon d'utiliser cette fonction pour définir un répertoire de travail.

Syntaxe de la fonction chdir () dans le langage C

int chdir (CONS CHAR * PATH)

Description de la fonction chdir () dans le langage C

La fonction chdir () définit le répertoire de travail dans le dossier spécifié dans le chemin absolu qui est passé dans la chaîne d'argument d'entrée. Cette fonction accepte une chaîne pure ou un pointeur de type char sur une chaîne qui contient le chemin du répertoire sélectionné. Pour amener le répertoire actuel au niveau supérieur, nous devons envoyer la chaîne «…» comme argument d'entrée à chdir (). Pour interroger le chemin, utilisez la fonction getCWD ().

L'argument de sortie de cette fonction est de type int. Si la sélection du répertoire de travail est réussie, Chdir () renvoie 0 comme résultat. Sinon, si une erreur se produit, le résultat est -1.

Lorsque nous travaillons avec cette fonction, nous le faisons directement sur la structure du fichier du système d'exploitation. Cette structure peut varier en différentes versions du système d'exploitation et il peut indiquer des répertoires qui n'existent pas ou qui ont un nom différent. Par conséquent, l'utilisation de cette fonction peut déclencher les différents types d'erreurs.

La fonction chdir () renvoie -1 si une erreur se produit pendant l'exécution. Cependant, ces informations ne sont pas suffisantes pour identifier l'erreur et fournir une solution en temps réel ou un message à l'utilisateur, informant de l'exception. Cependant, toutes les erreurs possibles que cette fonction peut organiser sont prédéfinies dans le «errno.en-tête h ”. Nous verrons plus tard une section spéciale pour identifier les erreurs prédéfinies.

La fonction chdir () est définie dans le «unistd.en-tête h ”. Pour l'utiliser, nous devons l'inclure dans notre «.Fichier C ”comme suit:

#inclure

Comment définir le répertoire de travail à l'aide de la fonction chdir () dans le langage C

Dans cet exemple, nous expliquons comment définir le répertoire de travail à partir de notre code C. La première étape consiste à inclure l'en-tête nécessaire, le «Unistd.h ”. Nous incluons également l'en-tête d'entrée et de sortie qui est le «stdio.h ”puisque nous utilisons la fonction printf () pour afficher les résultats. Il existe deux façons de définir le répertoire avec cette fonction. Le premier répertoire est une chaîne simple que nous envoyons comme argument d'entrée à chdir ().

Nous utilisons la fonction getCWD () pour récupérer le répertoire créé. La chaîne retournée est stockée dans le diron tableau de caractères que nous imprimons () sur le shell pour déterminer s'il est modifié correctement.

Dans l'extrait suivant, nous définissons le dossier «Documents» comme répertoire de travail en utilisant ce mode:

#inclure
#inclure
vide main ()

Char Dir [50];
chdir ("/ home / linuxhint / documents /");
printf ("\ n \ n Le répertoire sélectionné est:% s \ n", getCwd (dir, 50));

Ensuite, nous voyons une image avec la compilation et l'exécution de ce code:

La deuxième façon est de créer un tampon avec les éléments de type char avec le chemin du répertoire sélectionné et d'appeler la fonction chdir () en passant ce pointeur de chaîne comme argument d'entrée.

#inclure
#inclure
vide main ()

Char Dir [50];
Path char [50] = "/ home / linuxhint / documents /";
chdir (chemin);
printf ("\ n \ n Le répertoire sélectionné est:% s \ n", getCwd (dir, 50));

Ensuite, nous voyons une image avec la compilation et l'exécution de ce code:

Problèmes et solutions possibles lors de l'utilisation de la fonction chdir () dans le langage C

L'un des problèmes les plus courants lors de l'utilisation de la fonction chdir () est que cette fonction utilise le chemin absolu du répertoire que nous voulons sélectionner dans son argument d'entrée.

Lorsque nous travaillons avec des fichiers et des chemins de cheminement en programmation, nous le faisons généralement avec des fonctions comme fopen () ou similaires. Les chemins qui sont spécifiés comme arguments d'entrée dans ces fonctions ne doivent pas contenir le répertoire racine car ils rapportent le «chez lui» de l'utilisateur enregistré comme point de départ de leur point de départ.

Contrairement à ces fonctions, chdir () est une fonction système. Cela signifie qu'il utilise les chemins absolus. Si le répertoire domestique Linux (/) n'est pas spécifié comme début du chemin, cette fonction ne prend pas effet. Voici la bonne procédure pour sélectionner le répertoire «Documents» dans un chemin absolu:

Accueil / documents incorrects
/ Home / Documents correct

Le code suivant effectue la sélection du répertoire «Documents» avec deux appels à chdir (). Le premier code est sans le répertoire racine (/) et le deuxième code est avec le répertoire racine (/). Après chaque appel, il interroge le répertoire actuel avec getCWD () et l'affiche dans la console de commande.

#inclure
#inclure
vide main ()

char name_ptr [100];
// Pas de répertoire racine
chdir ("home / linuxhint / documents /");
printf ("No Root Directory:% s", getCWD (name_ptr, 100));
// avec répertoire racine
chdir ("/ home / linuxhint / documents /");
printf ("avec root répertoire:% s \ n", getCWD (name_ptr, 100));

Il est très important de prendre cela en compte lors du partage avec différentes fonctions, chaînes ou fragments qui contiennent les chemins de fichier ou les répertoires car, comme nous pouvons le voir, certaines fonctions prennent effet lorsque le répertoire racine n'est pas inclus tel que fopen () tandis que D'autres comme chdir () ne.

Dans l'image suivante, nous voyons le code précédent qui est compilé et exécuté et montre l'effet de cette fonction avec et sans le répertoire racine dans son chemin d'entrée.

Comment récupérer et identifier les exceptions qui peuvent être générées à l'aide de chdir () à l'aide des variables Errno et des erreurs par défaut dans l'errno.Tête H

Cette section explique brièvement comment identifier les erreurs générées possibles à l'aide de la fonction chdir () via les messages d'erreur prédéfinis dans l'errno.tête H.

Le «errno.L'en-tête h ”définit les codes d'erreur et est utilisé pour les identifier lorsqu'un programme est exécuté. Une variable de type entier nommé «Errno» est définie en elle qui stocke une valeur prédéfinie qui représente une erreur spécifique chaque fois qu'une exception se produit pendant l'exécution. Dans ce qui suit, vous pouvez voir un fragment original de la «base errno.En-tête h ”qui est inclus dans le« errno.h ”et dans lequel les erreurs les plus courantes sont définies:

#define eperm 1 / * opération non autorisée * /
#define noent 2 / * pas de tel fichier ou répertoire * / /
#define esrch 3 / * pas de tel processus * /
#define eintr 4 / * appel système interrompu * /
#define eio 5 / * Erreur d'E / S * /
#define enxio 6 / * pas de tel périphérique ou adresse * / /
#define e2big 7 / * liste d'arguments trop long * /
#define ENOEXEC 8 / * ERROR FORMAT EXEC * /
#define eBADF 9 / * Bad File Number * /
#define echild 10 / * pas de processus enfants * /
#define eagain 11 / * réessayer * /
#Define Enomem 12 / * hors de la mémoire * /
#define eacces 13 / * autorisation refusée * /
#define efault 14 / * mauvaise adresse * /
#define Enotblk 15 / * Bloquer le périphérique requis * /
#define eBusy 16 / * Appareil ou ressource occupé * /
#define eexist 17 / * Le fichier existe * /
#define exdev 18 / * lien inter-appareils * / /
#define enodev 19 / * pas de tel périphérique * /
#define enotdir 20 / * pas un répertoire * /
#define eisdir 21 / * est un répertoire * /
#define einval 22 / * Argument non valide * /
#define Enfile 23 / * Table de fichiers Overflow * /
#define EMFILE 24 / * Trop de fichiers ouverts * /
#define Enotty 25 / * Pas une machine à écrire * /
#Define EtxtBsy 26 / * Fichier texte occupé * /
#define efbig 27 / * fichier trop grand * /
#define enospc 28 / * Aucun espace laissé sur l'appareil * /
#Define Espipe 29 / * Seek illégal * /
#define EROFS 30 / * Système de fichiers en lecture seule * /
#define emlink 31 / * trop de liens * /
#Define Epipe 32 / * Pipe cassé * /
#Define Edom 33 / * Argument mathématique hors du domaine de Func * /
#define ERange 34 / * Résultat mathématique non représentable * /

Dans les cas où la fonction chdir () renvoie -1, nous pouvons identifier l'erreur à l'aide de la variable «errno». De cette façon, nous donnons un traitement spécifique pour résoudre l'erreur ou un message à l'utilisateur.

Les variables et les codes d'erreur sont définis dans le «errno.en-tête h ”. Pour les utiliser, nous devons les inclure dans notre «.Fichier C ”comme suit:

#inclure

Exemple:

Dans cet exemple, nous essaierons de définir le répertoire de travail sur un dossier inexistant. Donc, chdir () revient -1. Puisque nous savons que la fonction génère une erreur, nous consultons la variable «errno» dans une condition IF pour identifier l'erreur. Dans ce cas, c'est le Noent Erreur qui indique que le fichier ou le répertoire n'est pas trouvé et est représenté par le numéro 2.

Nous utilisons la fonction printf () pour envoyer un message à l'utilisateur, l'informant qu'une erreur s'est produite, le numéro d'erreur et sa signification. Ce qui suit est le code de cet exemple:

#inclure
#inclure
#inclure
vide main ()

Dans la terreur;
error = chdir ("/ home / linuxhint / docnts /");
if (error == -1)
printf ("\ n \ nan erreur s'est produite. Erreur:% i \ n ", errno);
if (errno == enoent)
printf ("Aucun fichier ou répertoire de ce type \ n \ n");

Vous pouvez essayer les différents fruits indiquant les dossiers existants et inexistants pour voir les résultats. L'image suivante montre la compilation et l'exécution de ce code:

Conclusion

Dans ce Indice de linux Article, nous avons expliqué comment utiliser la fonction chdir () pour spécifier un répertoire de travail. Nous avons examiné une section théorique sur cette fonction et appliqué ce que nous avons appris dans un exemple avec des extraits de code d'image. Nous vous avons également montré certaines des erreurs les plus courantes lorsque vous utilisez le chdir () et comment spécifier correctement le chemin de travail. De plus, nous avons inclus une section spéciale qui vous apprend à détecter les différentes erreurs avec la variable «errno».

Nous espérons que cet article vous est utile. Pour plus d'articles sur la langue C et les conseils Linux, utilisez le moteur de recherche sur notre site Web.