Systemaufrufe

Stat System Call Linux Tutorial

Stat System Call Linux Tutorial

Linux-Systemaufrufe

Vom Linux-Kernel bereitgestellte Systemaufrufe werden in der Programmiersprache C über glibc bereitgestellt.  Wenn ein Systemaufruf verwendet wird, kommunizieren Sie mit der OS und bei der Rückkehr kommuniziert die OS mit Ihnen über die Parameter, die an Systemaufruffunktionen zurückgegeben werden (Rückgabewerte).

Stat Systemaufruf:

Stat-Systemaufruf ist ein Systemaufruf in Linux, um den Status einer Datei zu überprüfen, z. B. um zu überprüfen, wann auf die Datei zugegriffen wurde. Der Systemaufruf stat() gibt tatsächlich Dateiattribute zurück. Die Dateiattribute eines Inodes werden grundsätzlich von der Funktion Stat() zurückgegeben. Ein Inode enthält die Metadaten der Datei. Ein Inode enthält: den Typ der Datei, die Größe der Datei, wann auf die Datei zugegriffen wurde (geändert, gelöscht), also Zeitstempel, und den Pfad der Datei, die Benutzer-ID und die Gruppen-ID, Links der Datei, , und physische Adresse des Dateiinhalts.

Wir können sagen, dass inode alle Daten enthält, die für den Systemaufruf stat() erforderlich sind, und es ist die Indexnummer für die Datei, die in der Inode-Tabelle gespeichert wird. Immer wenn Sie eine Datei erstellen, wird eine Inode-Nummer für diese Datei erstellt. Mit stat Systemaufruf können die Systemtabellen eingesehen werden.

Syntax des C Stat-Systemaufrufs:

Um den stat-Systemaufruf in der Programmiersprache C zu verwenden, müssen Sie die folgende Header-Datei einbinden:

#einschließen

Stat wird verwendet, um den Status einer Datei abzurufen. Die Syntax des C stat-Systemaufrufs ist möglicherweise nicht für jedes Betriebssystem gleich. Unter Linux lautet die Syntax für den stat-Systemaufruf wie folgt:

int stat(const char *path, struct stat *buf)

Der Rückgabetyp der Funktion in int, Wenn die Funktion erfolgreich ausgeführt wurde, wird 0 zurückgegeben, wenn Fehler auftreten, wird -1 zurückgegeben.

Hier const char *Pfad gibt den Namen der Datei an. Wenn der Dateipfad ein symbolischer Link ist, müssen Sie den Link anstelle des Dateinamens angeben.

Dann haben wir in der Funktion a Statistikstruktur in dem die Daten oder Informationen über die Datei gespeichert werden, die einen Zeiger namens . verwendet buf, die als Parameter übergeben und während der Ausführung des Anrufs ausgefüllt und nach dem Anruf vom Benutzer gelesen werden kann.

Statistikstruktur:

Die in . definierte Statistikstruktur Header-Datei enthält die folgenden Felder:

strukturieren

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_t          st_size;
struct timspec st_atim;
struct timspec st_mtim;
struct timspec st_ctim;
blksize_t      st_blksize;
blkcnt_t       st_blocks;
;

Beschreibung:

  1. st_dev: Es ist die ID des Geräts, auf dem sich unsere Datei derzeit befindet.
  2. st_rdev: Dieses Feld beschreibt, dass eine bestimmte Datei ein bestimmtes Gerät darstellt.
  3. st_ino: Es ist die Inode-Nummer oder die Seriennummer der Datei. Da es sich um eine Indexnummer handelt, sollte sie für alle Dateien eindeutig sein
  4. st_größe: st_size ist die Größe der Datei in Bytes.
  5. st_atime: Es ist das letzte oder das letzte Mal, zu dem auf die Datei zugegriffen wurde.
  6. st_ctime: Dies ist der letzte Zeitpunkt, zu dem der Status oder die Berechtigungen der Datei geändert wurden.
  7. st_mtime: Es ist der letzte Zeitpunkt, zu dem die Datei geändert wurde.
  8. st_blksize: Dieses Feld gibt die bevorzugte Blockgröße für das E/A-Dateisystem an, die von Datei zu Datei variieren kann.
  9. st_blocks: Dieses Feld gibt die Gesamtzahl der Blöcke in Vielfachen von 512 Bytes an.
  10. st_nlink: Dieses Feld gibt die Gesamtzahl der Hardlinks an.
  11. st_uid: Dieses Feld gibt die Benutzer-ID an.
  12. st_gid: Dieses Feld gibt die Gruppen-ID an.
  13. st_mode: Es zeigt die Berechtigungen für die Datei an, teilt die Modi einer Datei mit. Im Folgenden sind die Flags aufgeführt, die für das Feld st_mode definiert werden sollten:
Flaggen Beschreibung Flag-Wert
S_IFMT Eine Bitmaske, die verwendet wird, um den Moduswert einer Datei zu erhalten 0170000
S_IFSOCK Eine Dateikonstante von socket 0140000
S_IFLINK Eine Dateikonstante mit symbolischem Link 012000
S_IFREG Dateikonstante für reguläre Datei 0100000
S_IFBLK Dateikonstante für Blockdatei 0060000
S_IFDIR Dateikonstante für Verzeichnisdatei 0040000
S_IFCHR Dateikonstante für Zeichendatei 0020000
S_IFIFO Eine Dateikonstante von fifo 0010000
S_ISUID Benutzer-ID-Bit setzen 0004000
S_ISGID Gruppen-ID-Bit setzen 0002000
S_ISVTX Sticky Bit, das auf geteilten Text hinweist 0001000
S_IRWXU Besitzerberechtigungen (lesen, schreiben, ausführen) 00700
S_IRUSR Leseberechtigungen für Eigentümer 00400
S_IWUSR Schreibberechtigungen für Eigentümer 00200
S_IXUSR Ausführungsberechtigungen für Eigentümer 00100
S_IRWXG Gruppenberechtigungen (lesen, schreiben, ausführen) 00070
S_IRGRP Leseberechtigungen für Gruppe 00040
S_IWGRP Schreibberechtigungen für Gruppe 00020
S_IXGRP Ausführungsberechtigungen für Gruppe 00010
S_IRWXO Berechtigungen für andere (Lesen, Schreiben, Ausführen) 00007
S_IROTH Leseberechtigungen für andere 00004
S_IWOTH Schreibberechtigungen für andere 00002
S_IXOTH Ausführen von Berechtigungen für andere 00001

So verwenden Sie den Stat-Systemaufruf:

Das folgende Beispiel zeigt, wie Sie den stat-Systemaufruf in der Programmiersprache C in Linux, Ubuntu . verwenden.

BEISPIEL 1:

Im folgenden Code finden wir den Modus einer Datei:

CODE:

#einschließen
#einschließen
int main()

//Zeiger auf stat struct
struct stat-Datei;
//Stat Systemaufruf
stat("stat.c", &sdatei);
//Zugriff auf st_mode (Datenmember der Stat-Struktur)
printf("st_mode = %o", sfile.st_mode);
0 zurückgeben;

Das Kompilieren und Ausführen des Programms kehrt wie folgt zurück:

In diesem Code haben wir den Namen der Datei im stat-Systemaufruf übergeben und dann den Zeiger auf die stat-Struktur, die sfile ist. Der Zeiger auf stat struct wird dann verwendet, um auf st_mode zuzugreifen, das den Modus der Datei mit der printf-Anweisung anzeigt.

Die Header-Datei wird verwendet, damit Sie den stat-Systemaufruf verwenden können. Die Header-Datei ist die Standard-Ein-/Ausgabe-Bibliotheksdatei, damit Sie printf oder scanf in Ihrem C-Code verwenden können.

BEISPIEL 2:

Im folgenden Code erhalten wir Informationen über die Datei mithilfe des stat-Systemaufrufs:

CODE:

#einschließen
#einschließen
#einschließen
#einschließen
void sfile(char const filename[]);
int main()
ssize_t gelesen;
char* Puffer = 0;
size_t buf_size = 0;
printf("Geben Sie den Namen einer zu überprüfenden Datei ein: \n");
read = getline(&buffer, &buf_size, stdin);
wenn (lesen <=0 )
printf("Getline fehlgeschlagen\n");
Ausgang(1);

if (buffer[read-1] == '\n')
Puffer[lesen-1] = 0;

int s=open(Puffer,O_RDONLY);
wenn(s==-1)
printf("Datei existiert nicht\n");
Ausgang(1);

sonst
sfile(Puffer);

frei(Puffer);
0 zurückgeben;

void sfile(char const filename[])
struct stat-Datei;
if(stat(Dateiname,&sDatei)==-1)
printf("Fehler aufgetreten\n");

//Zugriff auf Datenelemente von stat struct
printf("\nDatei st_uid %d \n",sDatei.st_uid);
printf("\nDatei st_blksize %ld \n",sfile.st_blksize);
printf("\nDatei st_gid %d \n",sDatei.st_gid);
printf("\nDatei st_blocks %ld \n",sDatei.st_blöcke);
printf("\nDatei st_size %ld \n",sDatei.st_größe);
printf("\nDatei st_nlink %u \n",(unsigned int)sfile.st_nlink);
printf("\nDateiberechtigungen Benutzer\n");
printf((Datei.st_mode & S_IRUSR)? "r": "-");
printf((Datei.st_mode & S_IWUSR)? "w": "-");
printf((Datei.st_mode & S_IXUSR)? "x":"-");
printf("\n");
printf("\nDateiberechtigungsgruppe\n");
printf((Datei.st_mode & S_IRGRP)? "r": "-");
printf((Datei.st_mode & S_IWGRP)? "w": "-");
printf((Datei.st_mode & S_IXGRP)? "x":"-");
printf("\n");
printf("\nDateiberechtigungen Andere\n");
printf((Datei.st_mode & S_IROTH)? "r": "-");
printf((Datei.st_mode & S_IWOTH)? "w": "-");
printf((Datei.st_mode & S_IXOTH)? "x":"-");
printf("\n");

AUSGABE:

Im obigen C-Code haben wir den Dateinamen eingegeben und wenn die Datei nicht existiert, wird die Ausführung des Programms gestoppt. Dies wird im folgenden Bild demonstriert:

Wenn unsere Datei existiert, wird die Funktion sfile(n) aufgerufen, in der wir den Namen der Datei übergeben haben. Innerhalb der Funktion haben wir zuerst den Stat-Systemaufruf verwendet. Wenn stat() -1 zurückgibt, muss ein Fehler auftreten, damit eine Nachricht ausgegeben und die Ausführung des Programms gestoppt wird.

Dann haben wir in der printf-Anweisung den Namen der Funktion und das Punkttrennzeichen verwendet, um auf die Datenelemente von . zuzugreifen Statistikstruktur.

Dann haben wir für den Dateimodus auf die Makros oder Flags von st_mode zugegriffen. Hier wird logisch und Operator verwendet, um die jeweiligen Modi zu drucken. Wir haben die Berechtigungen für Benutzer, Gruppe und andere für die angegebene Datei überprüft (Dateiname vom Benutzer eingegeben).

Damit können Sie sehen, wie Sie den stat-Systemaufruf aus der Programmiersprache C verwenden, um Informationen vom Betriebssystemkernel über Dateien zu erhalten.  Wenn Sie eine Frage haben, teilen Sie uns dies gerne über den Kommentarbereich mit.

Top 5 Karten zur Spielaufnahme
Wir alle haben Streaming-Gameplays auf YouTube gesehen und geliebt. PewDiePie, Jakesepticye und Markiplier sind nur einige der Top-Gamer, die Millione...
So entwickeln Sie ein Spiel unter Linux
Vor einem Jahrzehnt hätten nicht viele Linux-Benutzer vorhergesagt, dass ihr Lieblingsbetriebssystem eines Tages eine beliebte Spieleplattform für kom...
Open-Source-Ports kommerzieller Spiele-Engines
Kostenlose, quelloffene und plattformübergreifende Spiel-Engine-Nachbildungen können verwendet werden, um sowohl alte als auch einige der relativ neue...