Konfigurowanie działającego katalogu zaczynającego się od katalogu głównego Linux, otwiera możliwość dostępu i pracy z całą strukturą pliku w różnych folderach systemowych i użytkowników.
Język C zapewnia funkcję CHDIR (.
W niniejszym artykule z Linux dowiesz się, jak korzystać z funkcji getCwd (), aby zapytać o katalog, w którym aktualnie pracujesz. Wyjaśnimy teoretyczne funkcjonowanie tej funkcji, jej składnię, typy jej argumentów wejściowych i wyjściowych oraz każdy typ danych.
Aby korzystać z tej funkcji w praktyczny sposób, zastosujemy wszystko, czego nauczyliśmy się poprzez praktyczny przykład, w którym uczysz się krok po kroku, jak korzystać z tej funkcji do pobrania obecnego katalogu roboczego.
Składnia funkcji getCwd () w języku c
char *getCwd (char *buf, rozmiar size_t);Opis funkcji getCwd () w języku c
Funkcja getCwd () pyta o bieżący katalog roboczy programu wywołującego lub procesu. Ta funkcja zwraca wskaźnik do tablicy znaków „BUF wielkości”, która zawiera ciąg z bezwzględną ścieżką bieżącego katalogu roboczego.
Jeśli wywołanie funkcji getCwd () zakończy się powodzeniem, zwraca wskaźnik do łańcucha ze ścieżką katalogu roboczego. Jeśli wystąpi błąd, wynik jest wskaźnikiem zerowym. W takim przypadku kod identyfikacji błędów jest automatycznie przechowywany w zmiennej globalnej Errno.
Zarówno deklaracja zmiennej errno, jak i definicje kodów błędów znajdują się w „errno.H ”nagłówek. W poniższym przykładzie zobaczymy specjalną sekcję, która wyjaśnia, jak wykryć i zidentyfikować błędy.
Funkcja getCwd () 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 zapytać o obecny katalog roboczy z funkcją getCwd () w języku c
W tym przykładzie wyjaśnimy, jak odzyskać bieżący katalog roboczy i wyświetlić go w konsoli poleceń.
Pierwszym krokiem do tego jest włączenie niezbędnych nagłówków. W tym przypadku są „unistd.h ”i„ stdio.H ”pliki. Następnie otwieramy funkcję main (), która zwraca pustą wartość zwracającą i w której deklarujemy ścieżkę tablicy ze 128 elementami typu char. W tej tablicy funkcja getCwd () przechowuje ciąg z katalogiem.
Po ogłoszeniu niezbędnych zmiennych wywołujemy funkcję getCwd (). Podajemy argument wejściowy „BUF” jako wskaźnik do ścieżki tablicy i rozmiar bufora jako rozmiar argumentu, w tym przypadku 128.
Następnie, używając funkcji printf (), drukujemy komunikat „Rzeczywisty katalog to:”, a następnie ścieżka katalogu zwracana przez funkcję getCwd (). Oto pełny kod tego przykładu:
#włączaćNastępnie widzimy obraz z kompilacją i wykonaniem tego kodu. W takim przypadku getCwd () zwraca bezwzględną ścieżkę katalogu domowego użytkownika w sesji:
Ten sam wskaźnik, który powraca getCwd () w argumencie „BUF”, zwraca następujący wynik:
wskaźnik do buff = getCwd (wskaźnik do buff, rozmiar);Umożliwia to wywołanie funkcji getCwd () z argumentów wejściowych innej funkcji. Poniższy kod pokazuje wywołanie z argumentów wejściowych printf ():
#włączaćW takim przypadku printf () przenosi wskaźnik do ciągu zwracanego przez getCwd () i drukuje go do konsoli poleceń z tylko jednym wierszem kodu.
Poniższy obraz pokazuje, że ta metoda ma taki sam efekt jak program w poprzednim przykładzie:
Błędy podczas korzystania z funkcji getCwd (): Jak je wykryć i identyfikować
Jeśli wystąpi błąd podczas wywoływania funkcji getCwd (), w rezultacie zwraca wskaźnik zerowy. Najłatwiejszym sposobem wykrycia błędu jest użycie warunku „jeśli”, w którym warunek wejściowy jest określany przez wynik równy NULL. Poniżej znajduje się fragment kodu, który wykorzystuje tę metodę do wykrywania błędów:
if (getCwd (ścieżka, 128) == null)Gdy wystąpi błąd, kod numeryczny, który go identyfikuje.H ”nagłówek.
Ten nagłówek definiuje również kody błędów i ich reprezentację numeryczną.
Możesz zobaczyć błędy, które może wygenerować funkcja getCwd (), ich reprezentacja numeryczna, która jest zwracana w zmiennej Errno, i krótki opis każdego z nich:
Definicja | Wartość w errno | Opis |
Enoent | 2 | Brak takiego pliku lub katalogu. |
EACCES | 13 | Zezwolenie odrzucone |
Efault | 14 | Zły adres. |
Einval | 22 | Błędny argument. |
Enametoolong | 36 | Nazwa pliku lub ścieżka zbyt długo. |
Najłatwiejszym sposobem zidentyfikowania błędu jest otwarcie warunkowego przełącznika, w którym warunkiem skoku jest zmienna globalna Errno, a każdy przypadek jest definicją błędu. Widzimy kod tej metody wykrywania:
if (getCwd (ścieżka, 128) == null)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ćWniosek
W tym artykule z podpowiedzi Linuksa wyjaśniliśmy, jak korzystać z funkcji getCwd () do określenia bieżącego katalogu roboczego programu wywołującego.
Przyjrzeliśmy się sekcji teoretycznej o tej funkcji, jakie są jej argumenty wejściowe i wyjściowe oraz jakiego rodzaju dane używa. Następnie zastosowaliśmy to, czego nauczyliśmy się poprzez praktyczne przykłady z obrazami i fragmentami kodu, które pokazują, jak zadeklarować niezbędne zmienne i wywołać funkcję getCwd ().
Dołączyliśmy również specjalną sekcję, w której wymieniamy różne błędy, które ta funkcja może wygenerować, i wyjaśniliśmy, jak je wykryć.