In den folgenden Abschnitten werden die grundlegenden Funktionen zur Durchführung von E/A bei der Entwicklung der C-Sprache unter Linux erläutert. Das Linux-System verfügt über mehrere Dateitypen. Bei der Darstellung von Beispielen und Experimenten wird jedoch darauf hingewiesen, dass es im Linux-System mehrere Dateitypen gibt, die sich alle um gewöhnliche Dateien drehen.
Dateitypen unter Linux
Erinnern Sie sich, dass wir in Abschnitt 9 darüber gesprochen haben, wie Unix-Systeme (Linux ist ein Unix-ähnliches System) denken, „alles ist eine Datei“? Die meisten Dateien in Unix-Systemen sind gewöhnliche Dateien und Verzeichnisse, und diese beiden Dateitypen werden auch am häufigsten verwendet. Beispielsweise gehören das Verzeichnis /usr und die darüber liegende Textdatei hello.txt zu gewöhnlichen Dateitypen.Tatsächlich unterteilt das Linux-System alle Dateien in die folgenden Kategorien:
Es scheint, dass die Geräte im Linux-System (z. B. Festplatte, paralleler Anschluss usw.) entweder Block-Spezialdateien oder Zeichen-Spezialdateien sind.
Dateitypen unter Linux abrufen
Linux bietet die stat-Funktionsreihe, um statistische Informationen zu Dateien zu erhalten. Geben Sie unter Linux manstat ein, um die Anleitung zur Verwendung der Stat-Funktion zu erhalten:
Der zweite Parameter der Statistikfunktion ist eine Struktur, ihre Definition finden Sie in:
struct stat { unsigned long st_dev; unsigned long st_ino; unsigned short st_mode; unsigned short st_nlink; unsigned short st_uid; unsigned short st_gid; unsigned long st_rdev; unsigned long st_size; unsigned long st_blksize; unsigned long st_blocks; unsigned long st_atime; unsigned long st_atime_nsec; unsigned long st_mtime; unsigned long st_mtime_nsec; unsigned long st_ctime; unsigned long st_ctime_nsec; unsigned long __unused4; unsigned long __unused5; };
Es ist ersichtlich, dass nur die Statistikfunktion stat verschiedene Informationen über die Datei erhalten kann, wie z. B. Benutzergruppen-ID, Benutzer-ID und Dateigröße. Das st_mode-Mitglied zeichnet den Dateityp und den Modus (Berechtigungen) auf. Verwenden Sie die folgenden Makros, um den Dateityp zu ermitteln:
... #define S_ISDIR(mode) __S_ISTYPE((mode), __S_IFDIR) #define S_ISCHR(mode) __S_ISTYPE((mode), __S_IFCHR) #define S_ISBLK(mode) __S_ISTYPE((mode), __S_IFBLK) #define S_ISREG(mode) __S_ISTYPE((mode), __S_IFREG) #ifdef __S_IFIFO # define S_ISFIFO(mode) __S_ISTYPE((mode), __S_IFIFO) #endif #ifdef __S_IFLNK # define S_ISLNK(mode) __S_ISTYPE((mode), __S_IFLNK) #endif ...
C-Sprachbeispiel, Linux-Dateityp abrufen
晓得了stat函数和以上几个宏,编撰C语言程序获取文件的类型是便捷的:
#include #include #include #include int main(int argc, char* argv[]) { if(argc < 2){ printf("ntusage:"); printf("ntt%s filepathn", argv[0]); return -1; } struct stat tmp; char* res; lstat(argv[1], &tmp); if(S_ISREG(tmp.st_mode)) res = "regular"; else if(S_ISDIR(tmp.st_mode)) res = "directory"; else if(S_ISBLK(tmp.st_mode)) res = "block"; else if(S_ISLNK(tmp.st_mode)) res = "link"; else if(S_ISFIFO(tmp.st_mode)) res = "fifo"; else if(S_ISSOCK(tmp.st_mode)) res = "socket"; else res = "unknown"; printf("%s : %sn", argv[1], res); return 0; }
以上代码使用了lstat函数,而不是stat函数,它俩的功能是相同的。惟一不同之处在于处理符号链接时,lstat是将该符号链接直接作为文件处理的,而stat函数则是处理该符号链接指向的文件。
编译以上代码,执行之:
# gcc t6.c # ./a.out usage: ./a.out filepath # ./a.out ../ ../ : directory # ./a.out t.c t.c : regular root@lcc:/lccRoot/C/tmp# ./a.out ../ ../ : directory # ./a.out /dev/log /dev/log : socket #
程序接收一个参数,并返回该参数的类型。其他几种类型文件的测试留给读者,在这一过程中可以顺便了解一下linux中的文件组成。
欢迎在评论区一起讨论linux文本编辑器,指责。文章都是手打原创,每晚最扼要的介绍C语言、linux等嵌入式开发,喜欢我的文章就关注一波吧,可以见到最新更新和之前的文章哦。
Das obige ist der detaillierte Inhalt vonErkunden Sie Dateitypen in Linux-Systemen: normale Dateien, Verzeichnisse und spezielle Dateien. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!