Funkcja LSTAT w C

Funkcja LSTAT w C
„Funkcja LSTAT () to w zasadzie jeden rodzaj wywołania systemu związanego z naszym systemem operacyjnym. Aby poznać szczegóły dotyczące funkcji LSTAT (), po pierwsze, musimy wiedzieć, co to jest wywołania systemu.

Połączenia systemowe dają środowisko trybowi usługi, który jest dostępny w systemie operacyjnym. Nasz program może wykonać w dwóch trybach. Jednym z nich jest tryb użytkownika, a inny jest tryb jądra. Jeśli program jest wykonywany w trybie jądra, program ma prawo do bezpośrednio dostępu do pamięci, sprzętu i innych zasobów.

Połączenia systemowe są komponentami systemu operacyjnego, które mają prawo do korzystania z wszystkich plików systemowych."

Co to jest funkcja LSTAT ()?

Funkcja LSTAT () będzie kontrolować cały status systemu i zwróci informacje o specjalnym linku zwanym linkiem symbolicznym. Stat () i fstat () funkcja podaje informacje o konkretnym pliku, ale funkcja LSTAT () odnosi się do linku, który wskazuje konkretny plik.

Składnia

Składnia funkcji LSTAT () jest -
int lstat (const char *ścieżka, struct stat *buf);

Tutaj, wewnątrz funkcji LSTAT (), przekazamy dwa parametry jako argument.

Pierwszym parametrem funkcji jest ścieżka, która podaje informacje o jej identyfikacji i prawdopodobne lub rzeczywiste źródło pliku.

Kolejnym parametrem jest buff, który podaje informacje o adresie struktury statystyki. Ta struktura statystyk zawiera wszystkie zaktualizowane informacje o konkretnym pliku, którego wskazuje wskaźnik *BUF.

Struktura funkcji LSTAT ()

System zwany funkcją lstat () zwraca strukturę zwaną strukturą statystyki. Członkowie danych tej struktury statystyk to:

  1. ST_MODE: Uprawnienia pliku i informacje o typie pliku.
  2. ST_INO: Informacje o INODE.
  3. ST_DEV: Nazwa urządzenia.
  4. ST_UID: Uzyskanie identyfikacji pliku źródłowego.
  5. ST_GID: Uzyskanie grupy identyfikacji pliku źródłowego
  6. ST_SIZE: Rozmiar pliku.
  7. ST_ATIME: Wspomnienie o ostatnim czasie używanego pliku.
  8. ST_CTIME: Wspomnienie o czasie zmiany metadanych pliku. Przykład: Zmiana nazwy pliku.
  9. ST_MTIME: Wspomnienie o czasie zmiany zawartości pliku.
  10. ST_NLINK: Wspominanie o liczbie wpisu katalogu.
  11. ST_BLOCKS: Liczenie liczby używanych bloków (512 bajtów).

Makra

Funkcja LSTAT () ma Stast Struction, która zawiera kilka rodzajów makr. Te makra pomagają funkcji LSTAT () rozpoznawanie typu plików. Nazwa tych makr to:

  1. S_ISBLK (): Test dla specjalnego pliku blokowego.
  2. S_ischr (): Sprawdź, czy plik jest plik urządzenia znaku.
  3. S_isdir (): Typ pliku to katalog.
  4. S_fififo (): kontrola związana z rurą w systemie.
  5. S_isreg (): Zbadaj powszechnie używany plik.
  6. S_isLink (): Zbadaj miękki link.
  7. S_issock (): sprawdź, czy plik jest gniazdem.

Teraz zobaczymy przykład programowania, aby zademonstrować funkcję połączenia systemowego LSTAT ().

PROGRAMOWANIE Przykład-1

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

char fl [] = "t.c ", sln [] =" t.link ";
struct Stat inf;
int fd;
if ((fd = creaty (fl, s_iwusr))<0)
Perror („creat () error”);
w przeciwnym razie

Zamknij (FD);
if (link (fl, sln)!= 0)
Perror („link () błąd”);
w przeciwnym razie

if (LSTAT (SLN i inf)!= 0)
Perror („lstat () błąd”);
w przeciwnym razie

PUTS („Uzyskamy poniżej informacje z LSTAT () dla pliku:”);
printf („Linki plików:%d \ n”, (int) inf.st_nlink);
printf („plik uid:%d \ n”, (int) inf.st_uid);
printf („plik inode:%d \ n”, (int) inf.st_ino);
printf („plik GID:%d \ n”, (int) inf.st_gid);
printf („pliku identyfikator dev:%d \ n”, (int) inf.st_dev);
printf („Tryb pliku:%08x \ n”, inf.st_mode);

unlink (SLN);

unlink (fl);

powrót 0;

Wyjście

Wyjaśnienie

Tutaj zobaczymy wyjście za pomocą funkcji LSTAT () na temat statusu konkretnego pliku, który jest tworzony przez programistę. W tym programie utworzyliśmy zwykły plik, a także stworzyliśmy jego symboliczny link. Pokazuje informacje o I-Node, identyfikatorze dev, trybie, brak linków, UID i GID. Funkcja LSTAT () zawiera wszystkie szczegółowe informacje o utworzonym pliku i odpowiadającym mu miękkim łącze.

PROGRAMOWANIE Przykład-2

Zobaczmy kolejną szczegółową implementację funkcji LSTAT ().

#włączać
#włączać
#włączać
#włączać
#włączać
int main (int argc, char *argv [])

struct Stat a;
if (argc != 2)
fprintf (stderr, „Wprowadź nazwę pliku jako 1st argument: %s \ n”, argv [0]);
exit (exit_failure);

if (lstat (argv [1] i a) == -1)
Perror („jakiś błąd dla LSTAT”);
exit (exit_failure);

printf („więc typ pliku wejściowego jest =>”);
Jeśli.st_mode & s_ifmt) == s_ifdir)
printf („Directory \ n”);
inaczej, jeśli (a.st_mode & s_ifmt) == s_ififo)
printf („FIFO/PURE \ N”);
inaczej, jeśli (a.st_mode & s_ifmt) == s_ifchr)
printf („urządzenie postaci \ n”);
inaczej, jeśli (a.st_mode & s_ifmt) == s_ifblk)
printf („urządzenie blokowe \ n”);
inaczej, jeśli (a.st_mode & s_ifmt) == s_ifreg)
printf („regularny \ n”);
inaczej, jeśli (a.st_mode & s_ifmt) == s_ifsock)
printf („gniazdo \ n”);
inaczej, jeśli (a.st_mode & s_ifmt) == s_iflnk)
printf („link symboliczny \ n”);
w przeciwnym razie
printf („nieznany \ n”);
printf ("nie. listy linków:%ld \ n ", (długi) a.st_nlink);
printf („Własność: uid =%ld gid =%ld \ n”,
(długi) a.st_uid, (długi) a.st_gid);
printf („inode no %ld \ n”, (długi) a.st_ino);
printf („Tryb: %lo (Octal) \ n”,
(długie bez podpisu) a.st_mode);
printf („Ostatni czas zmiany to:%s”, ctime (i a.st_ctime));
printf („Ostatni czas dostępu to: %s”, ctime (i a.st_atime));
printf („Ostatnia zmiana treści czasu pliku to: %s”, ctime (i.st_mtime));
printf („Preferowana długość bloków podawania I/O: %bajtów \ n”,
(długi) a.st_blkSize);
printf („Długość pliku to: %bajtów lld \ n”,
(długi).st_size);
printf („Liczenie nie. z używanych bloków %lld \ n ”,
(długi).st_blocks);
exit (exit_success);

Wyjście

Wyjaśnienie

Tutaj pokażemy każdą perspektywę funkcji połączenia systemowego LSTAT ().

Przy pierwszym wyjściu wpiszmy nazwę pliku bez informacji o jego ścieżce. Jako wyjście otrzymamy korzystanie z programu. Program potrzebuje nazwy/ścieżki pliku wejściowego jako 1. argumentu.

W następnym wyjściu pokażemy informacje o pliku urządzenia blokowego. Tutaj 5+0 rejestruje i 5+0 rejestruje się, a typ pliku wejściowego jest urządzeniem blokowym.

W następnym wyjściu utworzymy plik o nazwie „Papan_Char_Device_file„Który typ jest urządzeniem znakowym. Funkcja LSTAT () pomoże jej podać wszystkie informacje związane z tym urządzeniem znakowym.

Następnie stworzymy katalog o nazwie „Habibpur”Który typ pliku jest katalogiem. lstat () utworzy wszystkie informacje o tym pliku.

Następnie utworzymy kolejny plik o nazwie „Papan_fifo_file”, Którego typem pliku jest FIFO/RURE. Otrzymamy informacje o funkcji LSTAT dla pliku jako wyjściowe.

Następnie stworzymy symboliczny link o nazwie „Puja.tekst”Pliku o nazwie„Avishek.tekst”I uzyskaj funkcję LSTAT podaną informacje o pliku jako wyjściowe.

Następnie sprawdzimy typ pliku „Avishek.tekst,”, Który jest zwykłym plikem [już utworzonym w poprzednim kroku].

I na koniec utworzymy kolejny plik o nazwie ” Nadia_Socket_file.skarpetka”, Który typ pliku jest gniazdem i uzyskaj wszystkie szczegółowe informacje o tym pliku.

Za pomocą funkcji LSTAT () rozpoznamy wszystkie pliki.

Wniosek

W tym miejscu wspomnieliśmy o każdym aspekcie wywołania systemu funkcji LSTAT (). Widząc wszystkie cechy i typ implementacji funkcji LSTAT (), możemy wyraźnie zrozumieć, że jest to bardzo ważna funkcja wywołania systemu do uzyskania wszystkich atrybutów konkretnego pliku, który utworzyliśmy w naszym systemie, a system będzie reagował zgodnie z do instrukcji polecenia funkcji LSTAT ().