CHDR -funksjon på C -språk

CHDR -funksjon på C -språk
Å sette opp en fungerende katalog fra Linux Root Directory åpner for muligheten for å få tilgang til og jobbe med hele filstrukturen i de forskjellige system- og brukermappene.

I dette Linux hint Artikkel, vil du lære hvordan du setter opp en fungerende katalog ved hjelp av chdir () funksjon.

Vi vil forklare den teoretiske virkningen av denne funksjonen, dens syntaks, typer inngangs- og utgangsargumenter og hvilken type data som hvert av disse argumentene tar. Deretter vil vi se på en beskrivelse av hvordan chdir () fungerer og overskriftene som kreves for å bruke denne funksjonen.

For å bruke denne funksjonen i praksis, vil vi bruke alt vi lærte i et praktisk eksempel der du lærer trinn-for-trinn-prosessen på hvordan du bruker denne funksjonen til å angi en fungerende katalog.

Syntaks av chdir () -funksjonen på C -språk

int chdir (const char* sti)

Beskrivelse av CHDIR () -funksjonen på C -språk

CHDIR () -funksjonen setter arbeidskatalogen til den spesifiserte mappen i den absolutte banen som er bestått i inngangsargumentstrengen. Denne funksjonen godtar en ren streng eller en peker av char -type til en streng som inneholder banen til den valgte katalogen. For å få den gjeldende katalogen til UP -nivå, må vi sende strengen “...” som et inngangsargument til CHDIR (). For å spørre banen, bruk getCwd () -funksjonen.

Utgangsargumentet til denne funksjonen er av int -type. Hvis arbeidskatalogvalget er vellykket, returnerer CHDIR () 0 som resultat. Ellers, hvis en feil oppstår, er resultatet -1.

Når vi jobber med denne funksjonen, gjør vi det direkte på filstrukturen til operativsystemet. Denne strukturen kan variere i forskjellige versjoner av OS, og det kan peke på kataloger som ikke eksisterer eller har et annet navn. Derfor kan bruken av denne funksjonen utløse de forskjellige feilene.

CHDIR () -funksjonen returnerer -1 hvis en feil oppstår under utførelse. Denne informasjonen er imidlertid ikke tilstrekkelig til å identifisere feilen og gi en sanntidsløsning eller en melding til brukeren, og informerer om unntaket. Imidlertid er alle mulige feil som denne funksjonen kan kaste forhåndsdefinert i “Errno.h ”header. Vi vil senere se en spesiell seksjon for å identifisere de forhåndsdefinerte feilene.

Chdir () -funksjonen er definert i “Unistd.h ”header. For å bruke den, må vi inkludere det i ".c ”-fil som følger:

#inkludere

Hvordan angi arbeidskatalogen ved hjelp av CHDIR () -funksjonen på C -språket

I dette eksemplet forklarer vi hvordan du angir arbeidskatalogen fra C -koden vår. Det første trinnet er å inkludere den nødvendige overskriften, “Unistd.h ”. Vi inkluderer også inngangs- og utgangshodet som er "stdio.h ”siden vi bruker printf () -funksjonen for å vise resultatene. Det er to måter å angi katalogen med denne funksjonen. Den første katalogen er en vanlig streng som vi sender som et inngangsargument til CHDIR ().

Vi bruker GetCWD () -funksjonen for å hente den opprettede katalogen. Den returnerte strengen lagres i dir tegnarray som vi skriver ut () til skallet for å avgjøre om det endres riktig.

I det følgende utdraget setter vi mappen "Dokumenter" som arbeidskatalog ved hjelp av denne modusen:

#inkludere
#inkludere
tomrom ()

char dir [50];
chdir ("/home/Linuxhint/Documents/");
printf ("\ n \ n den valgte katalogen er: %s \ n", getcwd (dir, 50));

Deretter ser vi et bilde med sammenstilling og utførelse av denne koden:

Den andre måten er å lage en buffer med elementene i Char -typen med den valgte katalogstien og kalle chdir () -funksjonen ved å passere den strengpekeren som inngangsargument.

#inkludere
#inkludere
tomrom ()

char dir [50];
Char Path [50] = "/Home/Linuxhint/Documents/";
chdir (sti);
printf ("\ n \ n den valgte katalogen er: %s \ n", getcwd (dir, 50));

Deretter ser vi et bilde med sammenstilling og utførelse av denne koden:

Mulige problemer og løsninger når du bruker CHDIR () -funksjonen på C -språket

Et av de vanligste problemene når du bruker CHDIR () -funksjonen, er at denne funksjonen bruker den absolutte banen til katalogen som vi ønsker å velge i inngangsargumentet.

Når vi jobber med filer og stier i programmering, gjør vi det vanligvis med funksjoner som fopen () eller lignende. Banene som er spesifisert som inngangsargumenter i disse funksjonene, trenger ikke å inneholde rotkatalogen siden de tar "hjemmet" til den innloggede brukeren som utgangspunkt.

I motsetning til disse funksjonene, er chdir () en systemfunksjon. Dette betyr at den bruker de absolutte stiene. Hvis Linux Home Directory (/) ikke er spesifisert som starten av banen, trer ikke denne funksjonen i kraft. Her er riktig prosedyre for å velge "Dokumenter" -katalogen i en absolutt vei:

Hjem/dokumenter feil
/Hjem/dokumenter riktig

Følgende kode utfører valget av "dokumenter" -katalogen med to samtaler til CHDIR (). Den første koden er uten rotkatalogen (/) og den andre koden er med rotkatalogen (/). Etter hver samtale spør det gjeldende katalog med getCwd () og viser den i kommandokonsollen.

#inkludere
#inkludere
tomrom ()

char name_ptr [100];
// Ingen rotkatalog
Chdir ("Home/Linuxhint/Documents/");
printf ("ingen rotkatalog: %s", getcwd (name_ptr, 100));
// med rotkatalog
chdir ("/home/Linuxhint/Documents/");
printf ("med rotkatalog: %s \ n", getcwd (name_ptr, 100));

Det er veldig viktig å ta hensyn til dette når du deler med forskjellige funksjoner, kjeder eller fragmenter som inneholder filstiene eller katalogene, siden, som vi kan se, noen funksjoner trer i kraft når rotkatalogen ikke er inkludert som FOPEN () mens du Andre som Chdir () ikke.

I det følgende bildet ser vi den forrige koden som er samlet og utført og viser effekten av denne funksjonen med og uten rotkatalogen i inngangsveien.

Hvordan gjenopprette og identifisere unntakene som kan genereres ved hjelp av chdir () ved hjelp av errno -variablene og standardfeilene i errno.H header

Denne delen forklarer kort hvordan du kan identifisere mulige genererte feil ved bruk av CHDIR () -funksjonen gjennom de forhåndsdefinerte feilmeldingene i Errno.H header.

“Errno.H ”-overskrift definerer feilkodene og brukes til å identifisere dem når et program blir utført. En variabel av heltallstype som heter “Errno” er definert i den som lagrer en forhåndsdefinert verdi som representerer en spesifikk feil hver gang et unntak oppstår under utførelse. I det følgende kan du se et originalt fragment av “Errno-base.H ”header som er inkludert i“ Errno.h ”og hvor de vanligste feilene er definert:

#defin eperm 1 / * operasjon ikke tillatt * /
#Define Noent 2 / * Ingen slik fil eller katalog * /
#Define Esrch 3 / * Ingen slik prosess * /
#Define EINTR 4 / * Avbrutt systemanrop * /
#Define eio 5/ * i/o feil */
#Define Enxio 6 / * Ingen slik enhet eller adresse * /
#Define E2Big 7 / * argumentliste for lenge * /
#define enoexec 8 / * EXEC -formatfeil * /
#Define Ebadf 9 / * Dårlig filnummer * /
#Define Echild 10 / * Ingen barneprosesser * /
#Define Eagain 11 / * Prøv igjen * /
#Define EMEMEM 12 / * OUT AV MEMORY * /
#Define Eacces 13 / * Tillatelse nektet * /
#Define Efault 14 / * Dårlig adresse * /
#define enotblk 15 / * blokkeringsenhet påkrevd * /
#Define eBusy 16 / * enhet eller ressurs opptatt * /
#Define Eexist 17 / * -fil eksisterer * /
#Define Exdev 18 / * Kryss-enhetslink * /
#Define ENODEV 19 / * Ingen slik enhet * /
#definer enotdir 20 / * ikke en katalog * /
#Define Eisdir 21 / * er en katalog * /
#Define EinVal 22 / * Ugyldig argument * /
#Define Enfile 23 / * Filtabelloverløp * /
#Define Emfile 24 / * For mange åpne filer * /
#Define Enotty 25 / * Ikke en skrivemaskin * /
#Define EtxtBsy 26 / * Tekstfil opptatt * /
#Define Efbig 27 / * fil for stor * /
#Define Enospc 28 / * Ingen plass igjen på enheten * /
#Define Espipe 29 / * Ulovlig søk * /
#Define erofs 30 / * skrivebeskyttet filsystem * /
#Define Emlink 31 / * For mange lenker * /
#Define Epipe 32 / * ødelagt rør * /
#Define Edom 33 / * Matematikkargument fra FUNC * / / /
#Define Erange 34 / * Matematikkresultat ikke representert * /

I tilfeller der CHDIR () -funksjonen returnerer -1, kan vi identifisere feilen ved å bruke "Errno" -variabelen. På denne måten gir vi en spesifikk behandling for å løse feilen eller en melding til brukeren.

Variablene og feilkodene er definert i “Errno.h ”header. For å bruke dem, må vi inkludere dem i ".c ”-fil som følger:

#inkludere

Eksempel:

I dette eksemplet vil vi prøve å sette arbeidskatalogen til en ikke-eksisterende mappe. Så Chdir () returnerer -1. Siden vi vet at funksjonen genererer en feil, konsulterer vi "Errno" -variabelen i en IF -tilstand for å identifisere feilen. I dette tilfellet er det Noent Feil som indikerer at filen eller katalogen ikke er funnet og er representert med nummer 2.

Vi bruker printf () -funksjonen for å sende en melding til brukeren, og informerer dem om at det har oppstått en feil, feilnummeret og dens betydning. Følgende er koden for dette eksemplet:

#inkludere
#inkludere
#inkludere
tomrom ()

int feil;
feil = chdir ("/home/linuxhint/docnts/");
if (feil == -1)
printf ("\ n \ nan feil oppstod. Feil: %i \ n ", errno);
if (errno == enoent)
printf ("ingen slik fil eller katalog \ n \ n");

Du kan prøve de forskjellige fruktene som indikerer de eksisterende og ikke-eksisterende mappene for å se resultatene. Følgende bilde viser sammenstilling og utførelse av denne koden:

Konklusjon

I dette omfattende Linux hint Artikkel, vi forklarte hvordan du bruker CHDIR () -funksjonen for å spesifisere en fungerende katalog. Vi så på et teoretisk avsnitt om denne funksjonen og brukte det vi lærte i et eksempel med bildekodeutdrag. Vi viste deg også noen av de vanligste feilene når du bruker CHDIR () og hvordan du spesifiserer arbeidsveien riktig. I tillegg inkluderte vi en spesiell seksjon som lærer deg hvordan du kan oppdage de forskjellige feilene med "Errno" -variabelen.

Vi håper at denne artikkelen er nyttig for deg. For flere artikler om C -språket og Linux -tipsene, bruk søkemotoren på nettstedet vårt.