Funkcja CHDR w języku C

Funkcja CHDR w języku C
Konfigurowanie działającego katalogu zaczynającego się od katalogu głównego Linux, otwiera możliwość dostępu do całej struktury pliku w różnych folderach systemowych i użytkowników.

W tym Wskazówka Linux Artykuł, dowiesz się, jak skonfigurować działający katalog za pomocą chdir () funkcjonować.

Wyjaśnimy teoretyczne funkcjonowanie tej funkcji, jej składnię, typy argumentów wejściowych i wyjściowych oraz rodzaj danych, które przyjęto każdy z tych argumentów. Następnie spojrzymy na opis, w jaki sposób chdir () działa i nagłówki wymagane do użycia tej funkcji.

Aby użyć tej funkcji w praktyce, zastosujemy wszystko, czego nauczyliśmy się w praktycznym przykładzie, w którym uczysz się procesu krok po kroku, jak korzystać z tej funkcji, aby ustawić katalog roboczy.

Składnia funkcji chdir () w języku c

int chdir (const char* ścieżka)

Opis funkcji chdir () w języku c

Funkcja chdir () ustawia katalog roboczy na określony folder na ścieżce bezwzględnej, która jest przekazywana w ciągu argumentu wejściowego. Ta funkcja akceptuje czysty ciąg lub wskaźnik typu charytan. Aby przenieść bieżący katalog do poziomu UP, musimy wysłać ciąg „…” jako argument wejściowy do chdir (). Aby zapytać o ścieżkę, użyj funkcji getCwd ().

Argument wyjściowy tej funkcji jest typu int. Jeśli wybór katalogu roboczego zakończy się powodzeniem, chdir () zwraca 0 w wyniku. W przeciwnym razie, jeśli wystąpi błąd, wynik wynosi -1.

Kiedy pracujemy z tą funkcją, robimy to bezpośrednio w strukturze pliku systemu operacyjnego. Ta struktura może się różnić w różnych wersjach OS i może wskazywać na katalogi, które nie istnieją lub mają inną nazwę. Dlatego użycie tej funkcji może wywołać różne typy błędów.

Funkcja chdir () zwraca -1, jeśli błąd wystąpi podczas wykonywania. Informacje te nie są jednak wystarczające do zidentyfikowania błędu i zapewnienia użytkownika rozwiązania w czasie rzeczywistym lub wiadomości, informując o wyjątku. Jednak wszystkie możliwe błędy, które może rzucić tę funkcję, są predefiniowane w „Errno.H ”nagłówek. Później zobaczymy specjalną sekcję w celu zidentyfikowania predefiniowanych błędów.

Funkcja chdir () jest zdefiniowana w „unistd.H ”nagłówek. Aby go użyć, musimy go uwzględnić w „.plik C ”w następujący sposób:

#włączać

Jak ustawić katalog roboczy za pomocą funkcji chdir () w języku c

W tym przykładzie wyjaśniamy, jak ustawić katalog roboczy z naszego kodu C. Pierwszym krokiem jest włączenie niezbędnego nagłówka, „unistd.H". Uwzględniamy również nagłówek wejściowy i wyjściowy, który jest „stdio.h ”, ponieważ używamy funkcji printf () do wyświetlania wyników. Istnieją dwa sposoby ustawienia katalogu za pomocą tej funkcji. Pierwszy katalog to zwykły ciąg, który wysyłamy jako argument wejściowy do chdir ().

Używamy funkcji getCwd () do odzyskania utworzonego katalogu. Zwracany ciąg jest przechowywany w reż tablica znaków, którą drukujemy () do powłoki, aby ustalić, czy jest ona poprawnie zmieniona.

W poniższym fragmencie ustawiamy folder „Dokumenty” jako katalog roboczy przy użyciu tego trybu:

#włączać
#włączać
void main ()

Char Dir [50];
chdir ("/home/linuxhint/dokumenty/");
printf ("\ n \ n Wybrany katalog to: %s \ n", getCwd (Dir, 50));

Następnie widzimy obraz z kompilacją i wykonaniem tego kodu:

Drugim sposobem jest utworzenie bufora z elementami typu charytatycznego z wybraną ścieżką katalogu i wywołanie funkcji CHDIR (.

#włączać
#włączać
void main ()

Char Dir [50];
Char ścieżka [50] = "/home/linuxhint/dokumenty/";
chdir (ścieżka);
printf ("\ n \ n Wybrany katalog to: %s \ n", getCwd (Dir, 50));

Następnie widzimy obraz z kompilacją i wykonaniem tego kodu:

Możliwe problemy i rozwiązania podczas korzystania z funkcji chdir () w języku c

Jednym z najczęstszych problemów podczas korzystania z funkcji chdir () jest to, że funkcja ta używa bezwzględnej ścieżki katalogu, którą chcemy wybrać w argumencie wejściowym.

Kiedy pracujemy z plikami i ścieżkami w programowaniu, zwykle robimy to z funkcjami takimi jak fopen () lub podobnym. Ścieżki określone jako argumenty wejściowe w tych funkcjach nie muszą zawierać katalogu głównego, ponieważ zabierają „do domu” użytkownika zalogowanego jako punkt wyjścia.

W przeciwieństwie do tych funkcji, chdir () jest funkcją systemu. Oznacza to, że używa bezwzględnych ścieżek. Jeśli katalog domowy Linux (/) nie jest określony jako początek ścieżki, ta funkcja nie występuje. Oto poprawna procedura wyboru katalogu „Dokumenty” na bezwzględnej ścieżce:

Strona główna/dokumenty nieprawidłowe
/Strona główna/dokumenty

Poniższy kod wykonuje wybór katalogu „Dokumenty” z dwoma wywołaniami do chdir (). Pierwszy kod jest bez katalogu głównego (/), a drugi kod jest z katalogiem głównym (/). Po każdym połączeniu zapyta bieżący katalog za pomocą getCwd () i wyświetla go w konsoli dowodzenia.

#włączać
#włączać
void main ()

Char name_ptr [100];
// Brak katalogu głównego
chdir („home/linuxhint/dokumenty/”);
printf („Brak katalogu głównego: %s”, getCwd (name_ptr, 100));
// z katalogiem głównym
chdir ("/home/linuxhint/dokumenty/");
printf („Z katalogiem głównym: %s \ n”, getCwd (name_ptr, 100));

Bardzo ważne jest, aby wziąć to pod uwagę przy udostępnianiu z różnymi funkcjami, łańcuchami lub fragmentami zawierającymi ścieżki lub katalogów plików, ponieważ, jak widzimy, niektóre funkcje występują, gdy nie jest uwzględnione katalog główny, takie jak fopen (), podczas gdy fopen () inni tacy jak chdir () nie.

Na poniższym obrazie widzimy poprzedni kod, który jest skompilowany i wykonywany i pokazuje efekt tej funkcji z katalogiem głównym i bez niego na ścieżce wejściowej.

Jak odzyskać i zidentyfikować wyjątki, które można wygenerować za pomocą CHDIR () za pomocą zmiennych Errno i błędów domyślnych w Errno.H Nagłówek

W tej sekcji krótko wyjaśnia, jak zidentyfikować możliwe wygenerowane błędy za pomocą funkcji chdir () za pomocą predefiniowanych komunikatów o błędach w Errno.H Nagłówek.

„Errno.H ”nagłówek definiuje kody błędów i służy do ich identyfikacji, gdy program jest wykonywany. Zdefiniowana jest zmienna typu liczb całkowitych o nazwie „errno”, która przechowuje predefiniowaną wartość, która reprezentuje określony błąd za każdym razem, gdy występuje wyjątek podczas wykonywania. Poniżej można zobaczyć oryginalny fragment „errno-baza.H ”nagłówek, który jest zawarty w„ Errno.h ”i w których zdefiniowano najczęstsze błędy:

#definicja Eperm 1 / * Operacja Niedozwolona * /
#Define Noent 2 / * Brak takiego pliku lub katalogu * /
#definicja ESRCH 3 / * Brak takiego procesu * /
#definicja EINTR 4 / * Przerwane połączenie systemowe * /
#definicja EIO 5/ * Błąd we/wy */
#definicja enxio 6 / * brak takiego urządzenia lub adresu * /
#definicja lista argumentów E2BIG 7 / *
#Define ENOEXec 8 / * Exec Format Błąd * /
#definicja EBADF 9 / * Zły numer pliku * /
#definicja echild 10 / * Brak procesów dziecięcych * /
#definicja eagain 11 / * Spróbuj ponownie * /
#definicja enomem 12 / * z pamięci * /
#Define Eacces 13 / * Zezwolenie odmówiono * /
#definicja efault 14 / * zły adres * /
#definicja Enotblk 15 / * Block Wymagane * /
#definicja urządzenia Ebusy 16 / *
#definicja pliku eexist 17 / * istnieje * /
#definicja Exdev 18 / * link cross-evice * /
#definicja Enodeva 19 / * Brak takiego urządzenia * /
#definicja enotdir 20 / * nie katalog * /
#Define eisdir 21 / * to katalog * /
#Define Einval 22 / * Nieprawidłowy argument * /
#Define Enfile 23 / * Tabela pliku przepełnienie * /
#definicja emfile 24 / * zbyt wiele otwartych plików * /
#definicja Enotty 25 / * nie jest maszyna do pisania * /
#Define Etxtbsy 26 / * Plik tekstowy zajęty * /
#Define EFBIG 27 / * Plik zbyt duży * /
#definicja EnOSPC 28 / * Brak miejsca na urządzeniu * /
#definicja espipe 29 / * nielegalna szuka * /
#Define Erofs 30 / * System plików tylko do odczytu * /
#definicja Emlink 31 / * Za dużo linków * /
#definicja EPIPE 32 / * Złamana rura * /
#Define Edom 33 / * Math Argument poza domeną FUNC * /
#definicja Erange 34 / * Wynik matematyki nie jest reprezentowany * /

W przypadkach, w których funkcja chdir () zwraca -1, możemy zidentyfikować błąd za pomocą zmiennej „errno”. W ten sposób podajemy użytkownikowi określone leczenie, aby rozwiązać błąd lub komunikat.

Zmienne i kody błędów są zdefiniowane w „Errno.H ”nagłówek. Aby ich użyć, musimy je uwzględnić w „.plik C ”w następujący sposób:

#włączać

Przykład:

W tym przykładzie postaramy się ustawić katalog roboczy na nieistniejącym folderze. Więc chdir () zwraca -1. Ponieważ wiemy, że funkcja generuje błąd, konsultujemy zmienną „errno” w stanie IF, aby zidentyfikować błąd. W tym przypadku jest to Noent błąd wskazujący, że plik lub katalog nie jest znaleziony i jest reprezentowany przez numer 2.

Używamy funkcji printf (), aby wysłać wiadomość do użytkownika, informując go o wystąpieniu błędu, numeru błędu i jej znaczenia. Poniżej znajduje się kod tego przykładu:

#włączać
#włączać
#włączać
void main ()

w terrorze;
error = chdir ("/home/linuxhint/docntts/");
if (error == -1)
printf („\ n \ nan wystąpił błąd. Błąd: %i \ n ”, errno);
if (errno == enoent)
printf („brak takiego pliku lub katalogu \ n \ n”);

Możesz wypróbować różne owoce wskazujące istniejące i nieistniejące foldery, aby zobaczyć wyniki. Poniższy obraz pokazuje kompilację i wykonanie tego kodu:

Wniosek

W tym kompleksowym Wskazówka Linux Artykuł, wyjaśniliśmy, jak korzystać z funkcji chdir () do określenia katalogu roboczego. Przyjrzeliśmy się sekcji teoretycznej na temat tej funkcji i zastosowaliśmy to, czego nauczyliśmy się w przykładzie za pomocą fragmentów kodu obrazu. Pokazaliśmy również jedne z najczęstszych błędów podczas korzystania z chdir () i sposobu prawidłowego określenia ścieżki roboczej. Ponadto zawarliśmy specjalną sekcję, która uczy, jak wykryć różne błędy za pomocą zmiennej „errno”.

Mamy nadzieję, że ten artykuł jest dla Ciebie przydatny. Aby uzyskać więcej artykułów na temat porad C Language i Linux, użyj wyszukiwarki na naszej stronie internetowej.