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.
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:
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; };
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 ...
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函数则是处理该符号链接指向的文件。
编译以上代码,执行之:
# 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等嵌入式开发,喜欢我的文章就关注一波吧,可以见到最新更新和之前的文章哦。
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!