System STAT Call Linux Tutorial

System STAT Call Linux Tutorial

Połączenia systemu Linux

Połączenia systemowe dostarczone przez jądro Linux są eksponowane w języku programowania C przez GLIBC. Gdy używane jest wywołanie systemowe, komunikujesz się z systemem operacyjnym, a po powrocie system systemu operacyjnego komunikuje się z tobą za pomocą parametrów zwracanych do funkcji połączenia systemowego (wartości zwracania).

System System Call:

Wywołanie systemowe STAT to wywołanie systemowe w Linux, aby sprawdzić status pliku, tak aby sprawdzić, kiedy plik został dostępny. System wywołania stat () faktycznie zwraca atrybuty pliku. Atrybuty pliku INODE są zasadniczo zwracane przez funkcję stat (). INODE zawiera metadane pliku. INODE zawiera: typ pliku, rozmiar pliku, gdy plik został dostępny (zmodyfikowany, usunięty), a także ścieżka pliku, identyfikator użytkownika i identyfikator grupy, linki pliku oraz fizyczny adres zawartości pliku.

Możemy powiedzieć, że inode zawiera wszystkie dane wymagane dla wywołania systemowego stat () i jest to numer indeksu pliku zapisywanego w tabeli INODE. Za każdym razem, gdy tworzysz plik, utworzony jest numer iDODE dla tego pliku. Korzystając z wywołania systemu STAT, można oglądać tabele systemowe.

Składnia wywołania systemu statystyki C:

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

#włączać

STAT służy do uzyskania statusu pliku. Składnia wywołania systemu statystyki C może nie być taka sama dla każdego systemu operacyjnego. W Linux składnia wywołania systemu statystyk jest następująca:

int Stat (const char *ścieżka, struct stat *buf)

Rodzaj powrotu funkcji w INT, jeśli funkcja zostanie pomyślnie wykonywana, 0 jest zwracane, jeśli pojawią się jakieś błędy, -1 zostanie zwrócony.

Tutaj const char *ścieżka Określa nazwę pliku. Jeśli ścieżka pliku jest łącznikiem symbolicznym, musisz określić link zamiast nazwy pliku.

Następnie w funkcji mamy strukturę statystyk, w której przechowywane są dane lub informacje o pliku, które wykorzystują wskaźnik nazwany BUF, który jest przekazywany jako paramteter i wypełniony podczas wykonywania połączenia i czyte przez użytkownika.

Struktura statystyk:

Struktura STAT, która jest zdefiniowana w pliku nagłówka, zawiera następujące pola:

struct Stat

tryb_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_t st_size;
struct timspec st_atim;
struct timspec st_mtim;
struct timspec st_ctim;
BlkSize_t st_blkSize;
blkcnt_t st_blocks;
;

Opis:

  1. ST_DEV: Jest to identyfikator urządzenia, w którym obecnie przebywa nasz plik.
  2. ST_RDEV: To pole opisuje, że określony plik reprezentuje określone urządzenie.
  3. st_ino: Jest to numer inode lub numer seryjny pliku. Ponieważ jest to numer indeksu, więc powinien być unikalny dla wszystkich plików
  4. ST_SIZE: ST_SIZE to rozmiar pliku w bajtach.
  5. ST_ATIME: To ostatni raz lub ostatni raz, w którym dostęp do pliku.
  6. ST_CTIME: Jest to niedawny czas, w którym status lub uprawnienia pliku zostały zmienione.
  7. ST_MTIME: To ostatni czas, w którym plik został zmodyfikowany.
  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 informuje całkowitą liczbę bloków w wielokrotnościach 512 bajtów.
  10. st_nlink: To pole informuje całkowitą liczbę twardych linków.
  11. ST_UID: To pole wskazuje identyfikator użytkownika.
  12. ST_GID: To pole wskazuje identyfikator grupy.
  13. ST_MODE: Wskazuje uprawnienia do pliku, opowiada tryby w pliku. Poniżej znajdują się flagi, które należy zdefiniować dla pola ST_MODE:
Flagi Opis Wartość flagi
S_ifmt Maska bitowa używana do uzyskania trybu wartości pliku 0170000
S_ifsock Stała pliku gniazda 0140000
S_iflink Stała pliku symbolicznego linku 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 znaków 0020000
S_ififo Stała pliku FIFO 0010000
S_isuid Ustaw bit identyfikatora użytkownika 0004000
S_isgid Ustaw bit ID grupy 0002000
S_isvtx Lepki bit, który wskazuje na wspólny tekst 0001000
S_irwxu Uprawnienia właściciela (czytaj, zapisz, wykonaj) 00700
S_irusr Przeczytaj uprawnienia dla właściciela 00400
S_iwusr Napisz uprawnienia dla właściciela 00200
S_ixusr Wykonaj uprawnienia dla właściciela 00100
S_IRWXG Uprawnienia do grupy (czytaj, zapisz, wykonaj) 00070
S_irgrp Przeczytaj uprawnienia do grupy 00040
S_IWGRP Napisz uprawnienia do grupy 00020
S_ixgrp Wykonaj uprawnienia do grupy 00010
S_IRWXO Uprawnienia dla innych (czytaj, pisz, wykonaj) 00007
S_iroth Przeczytaj uprawnienia dla innych 00004
S_iwoth Napisz uprawnienia dla innych 00002
S_ixoth Wykonaj uprawnienia dla innych 00001

Jak korzystać z wywołania systemu statystyk:

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

PRZYKŁAD 1:

W poniższym kodzie znajdziemy tryb pliku:

KOD:

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

// wskaźnik do Stat struct
struct Stat sfile;
// wywołanie systemu statystyk
STAT („STAT.c "i sfile);
// Dostęp do ST_MODE (Członek danych Stat struct)
printf („st_mode = %O”, Sfile.st_mode);
powrót 0;

Kompilowanie i uruchomienie programu zwraca się jak poniżej:

W tym kodzie przekazaliśmy nazwę pliku w wywołaniu systemu STAT, a następnie wskaźnik do Stat struct, który jest Sfile. Wskaźnik do Stat struktura jest następnie używany do dostępu do ST_Mode, który wyświetla tryb pliku za pomocą instrukcji printf.

Plik nagłówka jest używany, abyś mógł użyć wywołania systemu statystyk. Plik nagłówka to standardowy plik biblioteki wejściowej/wyjściowej, dzięki czemu można użyć printf lub scanf w kodzie C.

Przykład 2:

W poniższym kodzie otrzymamy informacje o pliku za pomocą STAT System Call:

KOD:

#włączać
#włączać
#włączać
#włączać
void sfile (Char const filename []);
int main ()
ssize_t odczyt;
Char* bufor = 0;
size_t buf_size = 0;
printf („wprowadź nazwę pliku, aby sprawdzić: \ n”);
read = getline (& buffer i buf_size, stdin);
if (czytaj <=0 )
printf („getline nieudany \ n”);
wyjście (1);

if (bufor [read-1] == '\ n')
bufor [Read-1] = 0;

int s = Open (bufor, o_rdonly);
if (s ==-1)
printf („plik nie istnieje \ n”);
wyjście (1);

w przeciwnym razie
sfile (bufor);

darmowy (bufor);
powrót 0;

void sfile (char const filename [])
struct Stat sfile;
if (stat (nazwa pliku i sfile) ==-1)
printf („Wystąpił błąd \ n”);

// Dostęp do członków danych Stat struct
printf ("\ nfile st_uid %d \ n", sfile.st_uid);
printf ("\ nfile st_blksize %ld \ n", sfile.st_blkSize);
printf ("\ nfile st_gid %d \ n", sfile.st_gid);
printf ("\ nfile st_blocks %ld \ n", sfile.st_blocks);
printf ("\ nfile st_size %ld \ n", sfile.st_size);
printf ("\ nfile st_nlink %u \ n", (unsigned int) sfile.st_nlink);
printf („\ nFile uprawnienia użytkownika \ n”);
printf (sfile.ST_MODE & S_IRURSR)? "R":"-");
printf (sfile.ST_MODE & S_IWUSR)? „W”: „-”);
printf (sfile.ST_MODE & S_IXUSR)? "X":"-");
printf („\ n”);
printf („\ nFile uprawnienia grupa \ n”);
printf (sfile.ST_MODE & S_IRGRP)? "R":"-");
printf (sfile.ST_MODE & S_IWGRP)? „W”: „-”);
printf (sfile.ST_MODE & S_IXGRP)? "X":"-");
printf („\ n”);
printf („\ nfile uprawnienia inne \ n”);
printf (sfile.ST_MODE & S_IROTH)? "R":"-");
printf (sfile.ST_MODE & S_IWOTH)? „W”: „-”);
printf (sfile.ST_MODE & S_IXOTH)? "X":"-");
printf („\ n”);

WYJŚCIE:

W powyższym kodzie C wprowadziliśmy nazwę pliku, a jeśli plik nie istnieje, wykonanie programu zostanie zatrzymane. Zostaje to pokazane na poniższym obrazku:

Jeśli nasz plik istnieje, funkcja sfile (n) zostanie wywołana, w której przekazaliśmy nazwę pliku. Wewnątrz funkcji, przede wszystkim użyliśmy wywołania systemu STAT, jeśli STAT () zwróci -1, to musi wystąpić jakikolwiek błąd, aby komunikat zostanie wydrukowany, a wykonanie programu zostanie zatrzymane.

Następnie w instrukcji printf użyliśmy nazwy funkcji i separatora kropki, aby uzyskać dostęp do członków danych Stat struct.

Następnie w trybie 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 pod kątem określonego pliku (nazwa pliku wprowadzona przez użytkownika).

Dzięki temu możesz zobaczyć, jak korzystać z wywołania systemu STAT z języka programowania C, aby uzyskać informacje z jądra systemu operacyjnego o plikach. Jeśli masz pytanie, powiedz nam za pośrednictwem sekcji komentarza.