Stat System Call Linux samouczek

Stat System Call Linux Tutorial



Wywołania systemowe dostarczane przez jądro Linuksa są udostępniane w języku programowania C za pośrednictwem glibc. Gdy używane jest wywołanie systemowe, użytkownik komunikuje się z systemem operacyjnym, a po powrocie system operacyjny komunikuje się z użytkownikiem za pośrednictwem parametrów zwracanych do funkcji wywołań systemowych (wartości zwracane).

Wywołanie systemowe statystyk:

Wywołanie systemowe Stat to wywołanie systemowe w Linuksie, które sprawdza stan pliku, na przykład sprawdza, kiedy plik był dostępny. Wywołanie systemowe stat() faktycznie zwraca atrybuty pliku. Atrybuty pliku i-węzła są zasadniczo zwracane przez funkcję Stat(). I-węzeł zawiera metadane pliku. I-węzeł zawiera: typ pliku, rozmiar pliku, kiedy plik był dostępny (zmodyfikowany, usunięty), czyli znaczniki czasu i ścieżkę do pliku, identyfikator użytkownika i identyfikator grupy, linki do pliku oraz fizyczny adres zawartości pliku.







Można powiedzieć, że i-węzeł zawiera wszystkie dane wymagane do wywołania systemowego stat() i jest to numer indeksu pliku, który jest zapisany w tablicy i-węzłów. Za każdym razem, gdy tworzysz plik, tworzony jest numer i-węzła dla tego pliku. Za pomocą wywołania systemowego stat można przeglądać tabele systemowe.



Składnia wywołania systemowego C Stat:

Aby użyć wywołania systemowego stat w języku programowania C, musisz dołączyć następujący plik nagłówkowy:



#włączać

Stat służy do uzyskiwania statusu pliku. Składnia wywołania systemowego C stat może nie być taka sama dla każdego systemu operacyjnego. W Linuksie składnia wywołania systemowego stat jest następująca:





intstan(stały zwęglać *ścieżka, strukturastan*bufia)

Zwracany typ funkcji w int, jeśli funkcja zostanie wykonana pomyślnie, zwracane jest 0, jeśli występują błędy, zwracane jest -1.

Tutaj const char *ścieżka określa nazwę pliku. Jeśli ścieżka pliku jest dowiązaniem symbolicznym, musisz określić dowiązanie zamiast nazwy pliku.



Następnie w funkcji mamy strukturę stat, w której przechowywane są dane lub informacje o pliku, która używa wskaźnika o nazwie buf, który jest przekazywany jako parametr i wypełniany w trakcie wykonywania wywołania i odczytywany przez użytkownika po wywołaniu.

Struktura statystyk:

Struktura statystyk zdefiniowana w pliku nagłówkowym zawiera następujące pola:

strukturastan
{
mode_t st_mode;
ino_t st_ino;
dev_t st_dev;
dev_t st_rdev;
nlink_t st_nlink;
uid_t st_uid;
gid_t st_gid;
off_tst_rozmiar;
strukturatimspec st_atim;
strukturatimspec st_mtim;
strukturatimspec st_ctim;
blksize_t st_blksize;
blkcnt_t st_blocks;
};

Opis:

  1. st_dev: Jest to identyfikator urządzenia, w którym aktualnie znajduje się nasz plik.
  2. st_rdev: To pole opisuje, że określony plik reprezentuje określone urządzenie.
  3. st_ino: Jest to numer i-węzła lub numer seryjny pliku. Ponieważ jest to numer indeksu, powinien być unikalny dla wszystkich plików
  4. st_rozmiar: st_size to rozmiar pliku w bajtach.
  5. godzina_w: Jest to ostatni lub ostatni czas dostępu do pliku.
  6. st_ctime: Jest to ostatnia godzina zmiany statusu lub uprawnień pliku.
  7. st_mtime: Jest to ostatnia godzina modyfikacji pliku.
  8. st_blksize: To pole podaje preferowany rozmiar bloku dla systemu plików we/wy, który może się różnić w zależności od pliku.
  9. st_blocks: To pole podaje całkowitą liczbę bloków w wielokrotności 512 bajtów.
  10. st_nlink: To pole informuje o całkowitej liczbie twardych łączy.
  11. st_uid: To pole wskazuje identyfikator użytkownika.
  12. st_gid: To pole wskazuje identyfikator grupy.
  13. st_mode: Wskazuje uprawnienia do pliku, informuje o trybach pliku. Poniżej znajdują się flagi, które powinny być zdefiniowane dla pola st_mode:
Flagi Opis Wartość flagi
S_IFMT Maska bitowa używana do uzyskania wartości trybu pliku 0170000
S_IFSOCK Stała pliku gniazda 0140000
S_IFLINK Stała pliku dowiązania symbolicznego 0120000
S_IFREG Stała pliku dla zwykłego pliku 0100000
S_IFBLK Stała pliku dla pliku blokowego 0060000
S_IFDIR Stała pliku dla pliku katalogu 0040000
S_IFCHR Stała pliku dla pliku znakowego 0020000
S_IFIFO Stała pliku fifo 0010000
S_ISUID Ustaw bit identyfikatora użytkownika 0004000
S_ISGID Ustaw bit identyfikatora grupy 0002000
S_ISVTX Lepki bit, który wskazuje udostępniony tekst 0001000
S_IRWXU Uprawnienia właściciela (odczyt, zapis, wykonanie) 00700
S_IRUSR Uprawnienia do odczytu dla właściciela 00400
S_IWUSR Uprawnienia do zapisu dla właściciela 00200
S_IXUSR Wykonywanie uprawnień dla właściciela 00100
S_IRWXG Uprawnienia grupowe (odczyt, zapis, wykonanie) 00070
S_IRGRP Uprawnienia do odczytu dla grupy 00040
S_IWGRP Uprawnienia zapisu dla grupy 00020
S_IXGRP Wykonaj uprawnienia dla grupy 00010
S_IRWXO Uprawnienia dla innych (odczyt, zapis, wykonanie) 00007
S_IROTH Czytaj uprawnienia dla innych 00004
S_IWOTH Uprawnienia do zapisu dla innych 00002
S_IXOTH Wykonywanie uprawnień dla innych 00001

Jak korzystać z wywołania systemowego Stat:

Poniższy przykład pokazuje, jak używać wywołania systemowego stat w języku programowania C w systemie Linux, Ubuntu.

PRZYKŁAD 1:

W poniższym kodzie znajdziemy tryb pliku:

KOD:

#włączać
#włączać
intGłówny()
{
//wskaźnik do struktury stat
strukturaplik stanu;

//stat wywołanie systemowe
stan(„stat.c”, &sfile);

//dostęp do st_mode (element danych struktury stat)
printf ('st_mode = %o',plik.st_mode);
powrót 0;
}

Kompilacja i uruchomienie programu powraca jak poniżej:

W tym kodzie przekazaliśmy nazwę pliku w wywołaniu systemowym stat, a następnie wskaźnik do struktury stat, którą jest sfile. Wskaźnik do struktury stat jest następnie używany do uzyskania dostępu do trybu st_mode, który wyświetla tryb pliku za pomocą instrukcji printf.

Używany jest plik nagłówkowy, więc możesz użyć wywołania systemowego stat. Plik nagłówkowy jest standardowym plikiem biblioteki wejścia/wyjścia, dzięki czemu możesz używać printf lub scanf w kodzie C.

PRZYKŁAD 2:

W poniższym kodzie uzyskamy informacje o pliku za pomocą wywołania systemowego stat:

KOD:

#włączać
#włączać
#włączać
#włączać

próżniasfile(zwęglać stałyNazwa pliku[]);

intGłówny(){
rozmiar_t przeczytaj;
zwęglać*bufor= 0;
rozmiar_tbuf_size= 0;

printf ('Wprowadź nazwę pliku do sprawdzenia: ');
czytać=getline(&bufor, &buf_size,stdin);

Jeśli (czytać<=0 ){
printf („getline nie powiodło się” ');
Wyjście (1);
}

Jeśli (bufor[czytać-1] == ' '){
bufor[czytać-1] = 0;
}

ints=otwarty(bufor,O_RDONLY);
Jeśli(s== -1){
printf („Plik nie istnieje” ');
Wyjście (1);
}
w przeciwnym razie{
sfile(bufor);
}
darmowy (bufor);
powrót 0;
}

próżniasfile(zwęglać stałyNazwa pliku[]){

strukturaplik stanu;

Jeśli(stan(Nazwa pliku, &sfile)== -1){
printf ('Wystąpił błąd ');
}

//Uzyskiwanie dostępu do członków danych struktury stat
printf (' Plik st_uid %d ',plik.st_uid);
printf (' Plik st_blksize %ld ',plik.st_blksize);
printf (' Plik st_gid %d ',plik.st_gid);
printf (' Plik st_blocks %ld ',plik.st_blocks);
printf (' Plik st_size %ld ',plik.st_rozmiar);
printf (' Plik st_nlink% u ',(bez znaku int)plik.st_nlink);
printf (' Uprawnienia plików Użytkownik ');
printf ((plik.st_mode &S_IRUSR)? 'r':„-”);
printf ((plik.st_mode &S_IWUSR)? 'w':„-”);
printf ((plik.st_mode &S_IXUSR)? 'x':„-”);
printf (' ');
printf (' Grupa uprawnień do plików ');
printf ((plik.st_mode &S_IRGRP)? 'r':„-”);
printf ((plik.st_mode &S_IWGRP)? 'w':„-”);
printf ((plik.st_mode &S_IXGRP)? 'x':„-”);
printf (' ');
printf (' Uprawnienia do plików Inne ');
printf ((plik.st_mode &S_IROTH)? 'r':„-”);
printf ((plik.st_mode &S_IWOTH)? 'w':„-”);
printf ((plik.st_mode &S_IXOTH)? 'x':„-”);
printf (' ');
}

WYJŚCIE:

W powyższym kodzie C wpisaliśmy nazwę pliku i jeśli plik nie istnieje to wykonanie programu zostanie zatrzymane. Widać to na poniższym obrazku:

Jeśli nasz plik istnieje, zostanie wywołana funkcja sfile(n), w której przekazaliśmy nazwę pliku. Wewnątrz funkcji przede wszystkim użyliśmy wywołania systemowego Stat, jeśli stat() zwróci -1 to musi być jakiś błąd, aby komunikat został wydrukowany i wykonywanie programu zostało zatrzymane.

Następnie w instrukcji printf użyliśmy nazwy funkcji i separatora kropek, aby uzyskać dostęp do składowych danych struktura stat .

Następnie dla trybu pliku uzyskaliśmy dostęp do makr lub flag st_mode. Tutaj logiczny i operator służy do drukowania odpowiednich trybów. Sprawdziliśmy uprawnienia dla użytkownika, grupy i innych dla określonego pliku (nazwa pliku wprowadzona przez użytkownika).

Dzięki temu możesz zobaczyć, jak używać wywołania systemowego stat z języka programowania C, aby uzyskać informacje z jądra systemu operacyjnego o plikach. Jeśli masz pytanie, daj nam znać w sekcji komentarzy.