Maison  >  Article  >  Tutoriel système  >  Explorez les types de fichiers dans les systèmes Linux : fichiers ordinaires, répertoires et fichiers spéciaux

Explorez les types de fichiers dans les systèmes Linux : fichiers ordinaires, répertoires et fichiers spéciaux

王林
王林original
2024-06-27 10:58:25900parcourir

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

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.

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

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

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

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

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

linux特有的文件系统_linux系统有几种文件类型_linux典型文件系统类型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函数则是处理该符号链接指向的文件。

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等嵌入式开发,喜欢我的文章就关注一波吧,可以见到最新更新和之前的文章哦。

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn