Status System Call Linux Tutorial

Status System Call Linux Tutorial

Linux -Systemaufrufe

Systemaufrufe vom Linux -Kernel werden in der C -Programmiersprache über GLIBC freigelegt. Wenn ein Systemaufruf verwendet wird, kommunizieren Sie mit dem Betriebssystem und über die Parameter, die an Systemaufruffunktionen zurückgegeben werden (Rückgabewerte).

Statussystemanruf:

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 STAT () -Systemanruf gibt tatsächlich Dateiattribute zurück. Die Dateiattribute eines Inodes werden im Grunde genommen von der Funktion stat () zurückgegeben. Ein Inode enthält die Metadaten der Datei. Ein Inode enthält: der Typ der Datei, die Größe der Datei, wenn die Datei zugegriffen wurde (geändert, gelöscht), dh Zeitstempel und der Pfad der Datei, der Benutzer -ID und der Gruppen -ID, Links der Datei und physische Adresse von Dateiinhalten.

Wir können sagen, dass Inode alle Daten enthält, die für den STAT () -Systemanruf erforderlich sind, und es ist die Indexnummer für die Datei, die in der Inode -Tabelle gespeichert ist. Wenn Sie eine Datei erstellen, wird eine Inode -Nummer für diese Datei erstellt. Verwenden von STAT -Systemen Die Systemtabellen können angezeigt werden.

Syntax des C -Statistik -Systemaufrufs:

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

#enthalten

STAT wird verwendet, um den Status einer Datei zu erhalten. Die Syntax des C -STAT -Systemaufrufs ist für jedes Betriebssystem möglicherweise nicht gleich. In 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 wird, wird 0 zurückgegeben, wenn Fehler vorliegen, -1 wird 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.

In der Funktion haben wir dann eine Stat -Struktur, in der die Daten oder Informationen zur Datei gespeichert sind, bei der ein Zeiger namens benannt wird buf, Dies wird als Paramteter übergeben und während der Ausführung des Anrufs ausgefüllt und vom Benutzer nach dem Anruf lesbar.

Stat -Struktur:

Die in der Header -Datei definierte STAT -Struktur enthält die folgenden Felder:

strukturstat

modus_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, in der wir uns derzeit in unserer Datei befinden.
  2. ST_RDEV: In diesem Feld wird beschrieben, dass eine bestimmte Datei ein bestimmtes Gerät darstellt.
  3. ST_INO: Es ist die Inode -Nummer oder die serielle Nummer der Datei. Da es sich um eine Indexnummer handelt, sollte sie für alle Dateien eindeutig sein
  4. ST_SIZE: ST_SIZE ist die Größe der Datei in Bytes.
  5. ST_ATIME: Es ist das letzte Mal oder die letzte Zeit, zu der auf die Datei zugegriffen wurde.
  6. ST_CTIME: Es ist die jüngste Zeit, zu der der Status oder die Berechtigungen der Datei geändert wurden.
  7. ST_MTIME: Es ist die jüngste Zeit, zu der die Datei geändert wurde.
  8. ST_BLKSIZE: Dieses Feld gibt die bevorzugte Blockgröße für ein E/A -Dateisystem an, das möglicherweise von Datei zu Datei variieren kann.
  9. st_blocks: Dieses Feld zeigt die Gesamtzahl der Blöcke in Vielfachen von 512 Bytes an.
  10. ST_NLINK: In diesem Feld wird die Gesamtzahl der harten Links angezeigt.
  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 in der Datei an und gibt den Modi in einer Datei mit. Im Folgenden finden Sie die Flags, die für das Feld ST_MODE definiert werden sollten:
Flaggen Beschreibung Flaggenwert
S_ifmt Eine Bitmaske, mit der der Moduswert einer Datei abgerufen wird 0170000
S_ifsock Eine Dateikonstante der Steckdose 0140000
S_iflink Eine Dateikonstante des symbolischen Verknüpfung 0120000
S_ifreg Dateikonstante für die reguläre Datei 0100000
S_ifblk Dateikonstante für die Blockdatei 0060000
S_ifdir Dateikonstante für Verzeichnisdatei 0040000
S_ifchr Dateikonstante für die Zeichendatei 0020000
S_ififo Eine Dateikonstante von FIFO 0010000
S_isuid Benutzer -ID -Bit festlegen 0004000
S_isgid Gruppen -ID -Bit einstellen 0002000
S_isvtx Sticky -Bit, das den gemeinsamen Text anzeigt 0001000
S_irwxu Eigentümerberechtigungen (lesen, schreiben, ausführen) 00700
S_irusr Lesen Sie die Berechtigungen für den Eigentümer 00400
S_iwusr Schreiben Sie Berechtigungen für den Eigentümer 00200
S_ixusr Berechtigungen für den Eigentümer ausführen 00100
S_irwxg Gruppenberechtigungen (lesen, schreiben, ausführen) 00070
S_irgrp Lesen Sie die Berechtigungen für die Gruppe 00040
S_iwgrp Schreiben Sie Berechtigungen für die Gruppe 00020
S_ixgrp Berechtigungen für die Gruppe ausführen 00010
S_irwxo Berechtigungen für andere (lesen, schreiben, ausführen) 00007
S_iroth Lesen Sie die Berechtigungen für andere 00004
S_IWOTH Schreiben Sie Berechtigungen für andere 00002
S_ixoth Berechtigungen für andere ausführen 00001

So verwenden Sie den Statussystemanruf:

Das folgende Beispiel zeigt, wie der Status -System -Aufruf in der C -Programmiersprache unter Linux, Ubuntu, verwendet wird.

BEISPIEL 1:

Im folgenden Code finden wir den Modus einer Datei:

CODE:

#enthalten
#enthalten
int main ()

// Zeiger auf Statruction
struct stat sfile;
// states Systemanruf
stat ("stat.c ", & sfile);
// Zugriff auf ST_MODE (Datenelement von STAT -Struktur)
printf ("st_mode = %o", sfile.ST_MODE);
Rückkehr 0;

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

In diesem Cod. Der Zeiger auf STAT -Struktur wird dann zum Zugriff auf ST_MODE verwendet, wodurch der Modus der Datei mithilfe der Printf -Anweisung angezeigt wird.

Die Header -Datei wird verwendet, sodass Sie den Status -System -Aufruf verwenden können. Die Header -Datei ist die Standardeingangs-/Ausgabebibliotheksdatei, sodass Sie Printf oder Scanf in Ihrem C -Code verwenden können.

Beispiel 2:

Im folgenden Code erhalten wir Informationen zur Datei mit dem Status -System -Aufruf:

CODE:

#enthalten
#enthalten
#enthalten
#enthalten
void sfile (char const Dateiname []);
int main ()
ssize_t read;
char* buffer = 0;
size_t buf_size = 0;
printf ("Geben Sie den Namen einer Datei ein, um zu überprüfen: \ n");
read = getline (& buffer, & buf_size, stdin);
if (lesen <=0 )
printf ("GetLine fehlgeschlagen \ n");
Ausgang (1);

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

int s = open (puffer, o_rdonly);
if (s ==-1)
printf ("Datei existiert nicht \ n");
Ausgang (1);

anders
SFILE (Puffer);

frei (Puffer);
Rückkehr 0;

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

// Zugriff auf Datenmitglieder von STAT STRUFT
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 -Berechtigungen Benutzer \ n");
printf ((SFILE.ST_MODE & S_IRUSR)? "R":"-");
printf ((SFILE.ST_MODE & S_IWUSR)? "W": "-");
printf ((SFILE.ST_MODE & S_IXUSR)? "X":"-");
printf ("\ n");
printf ("\ nFile Permissions Group \ 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 -Berechtigungen Andere \ n");
printf ((SFILE.ST_MODE & S_IROTH)? "R":"-");
printf ((SFILE.ST_MODE & S_IWOTH)? "W": "-");
printf ((SFILE.ST_MODE & S_IXOTH)? "X":"-");
printf ("\ n");

AUSGANG:

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

Wenn unsere Datei vorliegt, wird die Funktion SFILE (N) aufgerufen, in der wir den Namen der Datei übergeben haben. In der Funktion haben wir zunächst einen Status -System -Aufruf verwendet. Wenn stat () -1 zurückgibt, muss ein Fehler ein Fehler, sodass eine Nachricht gedruckt wird und die Ausführung des Programms gestoppt wird.

In printf Anweisung haben wir dann den Namen Funktion und das Punktabscheider verwendet, um auf die Datenmitglieder von zuzugreifen Statruction.

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

Damit können Sie sehen. Wenn Sie eine Frage haben, fühlen Sie uns über einen Kommentarbereich hin.