Heim  >  Artikel  >  System-Tutorial  >  Erkunden Sie Dateitypen in Linux-Systemen: normale Dateien, Verzeichnisse und spezielle Dateien

Erkunden Sie Dateitypen in Linux-Systemen: normale Dateien, Verzeichnisse und spezielle Dateien

王林
王林Original
2024-06-27 10:58:25857Durchsuche

探索 Linux 系统中的文件类型:普通文件、目录与特殊文件

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 Linuxlinux系统有几种文件类型_linux典型文件系统类型_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:

linux系统有几种文件类型_linux典型文件系统类型_linux特有的文件系统

Der zweite Parameter der Statistikfunktion ist eine Struktur, ihre Definition finden Sie in: linux系统有几种文件类型_linux特有的文件系统_linux典型文件系统类型

 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;
};	

linux特有的文件系统_linux系统有几种文件类型_linux典型文件系统类型

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: linux典型文件系统类型_linux系统有几种文件类型_linux特有的文件系统

...
#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 abrufenlinux特有的文件系统_linux系统有几种文件类型_linux典型文件系统类型

晓得了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函数则是处理该符号链接指向的文件。

linux特有的文件系统_linux系统有几种文件类型_linux典型文件系统类型

编译以上代码,执行之:

# 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特有的文件系统_linux系统有几种文件类型

程序接收一个参数,并返回该参数的类型。其他几种类型文件的测试留给读者,在这一过程中可以顺便了解一下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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn