Maison > Article > Tutoriel système > Explorez les types de fichiers dans les systèmes Linux : fichiers ordinaires, répertoires et fichiers spéciaux
Les sections suivantes traitent des fonctions de base d'exécution d'E/S lors du développement du langage C sous Linux Le système Linux a plusieurs types de fichiers. Cependant, lors de l'expérimentation d'exemples, il existe plusieurs types de fichiers dans le système Linux, qui tournent tous autour de fichiers ordinaires.
Types de fichiers sous Linux
Vous vous souvenez dans la section 9, nous avons expliqué comment les systèmes Unix (Linux est un système de type Unix) pensent que « tout est un fichier » ? La plupart des fichiers dans les systèmes Unix sont des fichiers et des répertoires ordinaires, et ces deux types de fichiers sont également les plus couramment utilisés. Par exemple, le répertoire /usr et le fichier texte hello.txt situé au-dessus appartiennent à des types de fichiers ordinaires.
En fait, site Linux : infoq.cn, le système Linux divise tous les fichiers dans les catégories suivantes :
Il semble que les périphériques du système Linux (tels que le disque dur, le port parallèle, etc.) soient soit des fichiers spéciaux de bloc, soit des fichiers spéciaux de caractères.
Obtenir les types de fichiers sous Linux
Linux fournit la série de fonctions stat pour obtenir des informations statistiques sur les fichiers. Entrez manstat sous Linux pour obtenir le guide d'utilisation de la fonction stat :
Le deuxième paramètre de la fonction stat est une structure, sa définition se trouve dans :
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; };
On peut voir que la fonction statistique stat peut obtenir diverses informations sur le fichier, telles que l'ID du groupe d'utilisateurs, l'ID utilisateur, la taille du fichier et d'autres informations. Le membre st_mode enregistre le type et le mode du fichier (autorisations). Utilisez les macros suivantes pour obtenir le type de fichier :
... #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 ...
Exemple de langage C, obtenez le type de fichier 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函数则是处理该符号链接指向的文件。
编译以上代码,执行之:
# 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等嵌入式开发,喜欢我的文章就关注一波吧,可以见到最新更新和之前的文章哦。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!