Funkcja readLink C

Funkcja readLink C

Funkcja czytlink () języka programowania C jest używana do wstawienia informacji o łączu symbolicznym, który odnosi się do jakiejś ścieżki, do bufora. Czytanie zawartości symbolicznego linku jest określane jako „czytanie linku” lub „ReadLink”. Pozostała zawartość bufora pozostaje nieokreślona, ​​jeśli długość bajtów przez symboliczne łącza jest mniejsza niż buffer_size. W tym artykule omówimy niektóre przykłady ilustrujące działanie funkcji ReadLink C w systemie Kali Linux. Składnia funkcji ReadLink jest podana w następujący sposób:

Funkcja ReadLink () znajduje się w pliku nagłówka . Ten plik nagłówka musi być zawarty powyżej głównej funkcji w pliku kodu. Bufor nie zawiera znaku zerowego po wyniku.

#włączać
  • ssize_t readLink (const char *ogranicz link_nazwa ścieżki, char *ogranicz bufor,
      • size_t Rozmiar bufora);

Wartość łącza symbolicznego jest skrócona tak, aby zmieściła się w buforze, jeśli jest zbyt krótki, aby utrzymać go w całości (buffer_size). Początkowe bajty rozmiaru buforu muszą zostać dodane do bufora na wypadek, gdyby argument buforowy nie był wystarczająco duży, aby utrzymać zawartość łącza. Jeśli rozmiar bufora jest większy niż maksymalny rozmiar, wynik jest zdefiniowany na implementację. Liczba bajtów załadowanych do bufora zostanie zwrócona, jeśli zostanie pomyślnie wykonana ReadLink (). W przeciwnym razie musi zwrócić -1 i ustawić errno, aby zidentyfikować dokładny błąd i pozostawić bufor niezmodyfikowany. Oto lista opisów błędów wraz z kodem:

  • Einval: W nazwanym pliku nie ma symbolicznego linku.
  • EIO: Odczyt z systemu plików spowodował błąd wejściowy lub wyjściowy.
  • EACCES: Element przedrostka ścieżki nie ma uprawnienia do wyszukiwania.
  • Elop: W symbolicznych powiązaniach istnieje pętla. Podczas rozwiązywania argumentu ścieżki błąd jest podniesiony, jeśli znaleziono więcej niż POSIX SYMLOOP SYMBOLIC LINKI.
  • Enoent: Nie ma takiego pliku, jak nazwany link.

Oceńmy funkcję ReadLink () w niektórych przykładach. Utwórz plik programowania C w terminalu Linux za pomocą edytora VIM. Możesz użyć Nano lub dowolnego innego edytora do utworzenia pliku.

Wszystkie pliki nagłówka są zawarte w poniższym kodzie przed główną funkcją. W pierwszym wierszu głównego bloku konstrukcja „STAT” jest zadeklarowana. Następnie deklarowany jest wskaźnik typu znaku, który jest później używany w funkcji ReadLink (). Używamy ssize_t zamiast typu danych liczb całkowitych. Jest to typ podpisany. Ich maksymalne wartości są związane z tym, czy system operacyjny jest 32-bitowy, czy 64-bitowy. Zadeklarowaliśmy dwie zmienne tego typu danych: buffer_size i nBytes (liczba bajtów).

W następnym wierszu kodu sprawdziliśmy liczbę argumentów dostarczonych z wiersza poleceń do funkcji głównej. Jeśli nie jest to równe 2, program wychodzi z funkcji głównej za pomocą funkcji wyjścia, która również wyświetla komunikat o błędzie. Lokalizacja pamięci, do której odwołuje się bufor to miejsce, w którym informacje o stanie danego pliku są przechowywane po uzyskaniu funkcji LSTAT (). Jeśli nazwa pliku jest łącznikiem symbolicznym, ta funkcja zwraca szczegóły dotyczące samego łącza symbolicznego. Informacje zwrócone przez funkcję LSTAT mają postać struktury statystyk, do której odwołuje się bufor.

Dane dotyczące statusu dla określonego pliku są gromadzone przez funkcję LSTAT () i umieszczane na adresie pamięci wskazane przez bufor. Ta metoda zawiera informacje o samym łączu symbolicznym, jeśli nazwa pliku jest symbolicznym linkiem. Dane, które zwraca funkcja LSTAT, mają postać struktury statystyk. Zwiększyliśmy rozmiar bufora o jeden.

W niektórych przypadkach zgłoszony rozmiar wynosi zero, zwrócony przez symboliczny link. W tej sytuacji ustaw rozmiar bufora na wartość ścieżki. Ustaw bufor za pomocą alokacji pamięci, który wykorzystuje buffer_Size. Sprawdź, czy bufor jest zerowy, a następnie wyświetl komunikat o błędzie. Wywołaj funkcję ReadLink i przejdź ścieżką linku odczytu, bufora i buffer_Size do tej funkcji. Funkcja zwraca liczbę bajtów zwróconych na ścieżce. Jeśli liczba bajtów wynosi -1, to wyświetl błąd, w przeciwnym razie wyświetl lokalizację punktu połączonego pliku. Następnie uwolnij bufor.

Skompiluj plik C za pomocą kompilatora GCC. Readlink.Plik out zawiera wynik pliku.

W pierwszym wykonaniu przekazuje nazwę katalogu, która nie jest łącznikiem symbolicznym, więc daje błąd, że nie ma takiego pliku ani katalogu.

Poniżej przekazaliśmy katalog główny, który jest nieprawidłowym argumentem.

Teraz, gdy przeszliśmy ścieżkę, funkcja ReadLink zwraca nazwę symbolicznego linku, do którego wskazuje.

Użyjmy pliku C do skonstruowania pliku i symbolicznego linku do niego. Utworzyliśmy nazwę pliku i symboliczny link w głównej funkcji. Utwórz plik za pomocą przełącznika s iwuser za pomocą funkcji Utwórz. Nowy twardy link można wykonać do istniejącego pliku za pomocą metody Link () biblioteki C. Aby zbudować miękki łącze, użyj metody symboli (). Nie zostanie zastąpiony, jeśli plik lub ścieżka już istnieje. Po powodzenia, funkcje link () i symLink () zwracają 0.

Użyj kompilatora GCC do kompilacji kodu, a następnie zapisz wyniki w ReadLink1.plik.

Wykonaj kod. Oto wyjście:

Wniosek:

Chodzi o użycie funkcji CEADLink () C w niektórych przykładach zaimplementowanych w systemie Kali Linux. Opracowaliśmy jego użycie, składnię i błędy, które zawiera w niektórych przykładach, aby być bardziej szczegółowym i bardziej wyraźniejszym.