Rumah >Tutorial sistem >LINUX >Teroka jenis fail dalam sistem Linux: fail biasa, direktori dan fail khas

Teroka jenis fail dalam sistem Linux: fail biasa, direktori dan fail khas

王林
王林asal
2024-06-27 10:58:25930semak imbas

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

Bahagian berikut membincangkan fungsi asas melaksanakan I/O apabila membangunkan bahasa C dalam Linux Sistem Linux mempunyai beberapa jenis fail. Walau bagaimanapun, dalam proses memberi contoh dan eksperimen, terdapat beberapa jenis fail dalam sistem Linux, yang semuanya berkisar pada fail biasa.

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

Ingat dalam Bahagian 9, kita bercakap tentang bagaimana sistem Unix (Linux ialah sistem seperti Unix) berfikir "semuanya adalah fail"? Kebanyakan fail dalam sistem Unix ialah fail dan direktori biasa, dan kedua-dua jenis fail ini juga yang paling biasa digunakan Contohnya, direktori /usr dan fail teks hello.txt di atasnya tergolong dalam jenis fail biasa.

Malah, tapak linux:infoq.cn, sistem linux membahagikan semua fail kepada kategori berikut:

Nampaknya peranti dalam sistem Linux (seperti cakera keras, port selari, dll.) sama ada menyekat fail khas atau fail khas aksara.

Dapatkan jenis fail dalam linux

Linux menyediakan siri statistik fungsi untuk mendapatkan maklumat statistik fail. Masukkan manstat dalam Linux untuk mendapatkan panduan penggunaan fungsi stat:

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

linux系统有几种文件类型_linux特有的文件系统_linux典型文件系统类型Parameter kedua fungsi stat ialah struktur, definisinya boleh didapati dalam:

 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特有的文件系统Dapat dilihat bahawa hanya statistik fungsi statistik boleh mendapatkan pelbagai maklumat tentang fail, seperti ID kumpulan pengguna, ID pengguna dan saiz fail. Ahli st_mode merekodkan jenis fail dan mod (kebenaran). Gunakan makro berikut untuk mendapatkan jenis fail:

...
#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典型文件系统类型Contoh bahasa C, dapatkan jenis fail 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等嵌入式开发,喜欢我的文章就关注一波吧,可以见到最新更新和之前的文章哦。

Atas ialah kandungan terperinci Teroka jenis fail dalam sistem Linux: fail biasa, direktori dan fail khas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn