다음 섹션에서는 Linux에서 C 언어를 개발할 때 I/O를 수행하는 기본 기능에 대해 설명합니다. Linux 시스템에는 여러 가지 파일 형식이 있습니다. 그러나 예제를 실험하는 과정에서 Linux 시스템에는 여러 가지 파일 형식이 있으며 모두 일반 파일을 중심으로 진행됩니다.
리눅스의 파일 형식
섹션 9에서 Unix 시스템(Linux는 Unix와 유사한 시스템)이 "모든 것이 파일"이라고 생각하는 방식에 대해 이야기한 것을 기억하시나요? 유닉스 시스템의 대부분의 파일은 일반 파일과 디렉토리이며, 이 두 가지 유형의 파일도 가장 일반적으로 사용됩니다. 예를 들어 /usr 디렉토리와 그 위의 hello.txt 텍스트 파일은 일반 파일 유형에 속합니다.
실제로 Linux 사이트:infoq.cn에서 Linux 시스템은 모든 파일을 다음 범주로 나눕니다.
리눅스 시스템의 장치(하드 디스크, 병렬 포트 등)는 블록 특수 파일이거나 문자 특수 파일인 것 같습니다.
리눅스에서 파일 형식 가져오기
Linux는 파일의 통계 정보를 얻기 위한 stat 시리즈 기능을 제공합니다. stat 함수의 사용 가이드를 보려면 Linux에 manstat를 입력하세요.
stat 함수의 두 번째 매개변수는 구조이며, 해당 정의는 다음에서 찾을 수 있습니다.
으아악
통계 함수 stat만이 사용자 그룹 ID, 사용자 ID, 파일 크기 등 파일에 대한 다양한 정보를 얻을 수 있음을 알 수 있습니다. st_mode 멤버는 파일 유형과 모드(권한)를 기록합니다. 파일 형식을 얻으려면 다음 매크로를 사용하십시오:
으아악
C 언어 예, 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等嵌入式开发,喜欢我的文章就关注一波吧,可以见到最新更新和之前的文章哦。
위 내용은 Linux 시스템의 파일 유형 탐색: 일반 파일, 디렉터리 및 특수 파일의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!