首页 系统教程 操作系统 探索 Linux 系统中的文件类型:普通文件、目录与特殊文件

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

Jun 27, 2024 am 10:58 AM

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

后面几节讨论了在linux中进行C语言开发时linux系统有几种文件类型,执行I/O的基本函数。不过在举例做实验的过程中linux系统有几种文件类型,都是围绕普通文件进行的。

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

linux中的文件类型

还记得在第9节,我们谈到unix系统(linux是类unix系统)觉得“一切皆文件”吗?unix系统中大多数文件是普通文件和目录,这两种类型的文件也是最常使用的,例如/usr目录和它上面的hello.txt文本文件就属于普通文件类型。

事实上linux site:infoq.cn,linux系统将所有文件分为以下几大类:

如此看来,linux系统中的设备(如硬碟,并口等)要么是块特殊文件,要么就是字符特殊文件了。

获取linux中的文件类型

linux提供了stat系列函数获取文件的统计信息。在linux中输入manstat,即可得到stat函数的使用指南:

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

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

stat函数的第二个参数是一个结构体,它的定义可以在中找到:

 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特有的文件系统

可以看出,统计函数stat才能获得文件的各类信息,比如用户组ID,用户ID,以及文件的size等信息。其中st_mode成员记录着文件的类型以及mode(权限)。使用下边这几个宏即可获得文件的类型:

...
#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典型文件系统类型

C语言实例,获取linux文件类型

linux典型文件系统类型_linux系统有几种文件类型_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等嵌入式开发,喜欢我的文章就关注一波吧,可以见到最新更新和之前的文章哦。

以上是探索 Linux 系统中的文件类型:普通文件、目录与特殊文件的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1673
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
Linux管理员的薪水是多少? Linux管理员的薪水是多少? Apr 17, 2025 am 12:24 AM

Linux管理员的平均年薪在美国为75,000至95,000美元,欧洲为40,000至60,000欧元。提升薪资可以通过:1.持续学习新技术,如云计算和容器技术;2.积累项目经验并建立Portfolio;3.建立职业网络,拓展人脉。

Linux系统管理员的主要任务是什么? Linux系统管理员的主要任务是什么? Apr 19, 2025 am 12:23 AM

Linux系统管理员的主要任务包括系统监控与性能调优、用户管理、软件包管理、安全管理与备份、故障排查与解决、性能优化与最佳实践。1.使用top、htop等工具监控系统性能,并进行调优。2.通过useradd等命令管理用户账户和权限。3.利用apt、yum管理软件包,确保系统更新和安全。4.配置防火墙、监控日志、进行数据备份以确保系统安全。5.通过日志分析和工具使用进行故障排查和解决。6.优化内核参数和应用配置,遵循最佳实践提升系统性能和稳定性。

Linux的主要目的是什么? Linux的主要目的是什么? Apr 16, 2025 am 12:19 AM

Linux的主要用途包括:1.服务器操作系统,2.嵌入式系统,3.桌面操作系统,4.开发和测试环境。Linux在这些领域表现出色,提供了稳定性、安全性和高效的开发工具。

Linux和Windows之间虚拟化支持有哪些差异? Linux和Windows之间虚拟化支持有哪些差异? Apr 22, 2025 pm 06:09 PM

Linux和Windows在虚拟化支持上的主要区别在于:1)Linux提供KVM和Xen,性能和灵活性突出,适合高定制环境;2)Windows通过Hyper-V支持虚拟化,界面友好,与Microsoft生态系统紧密集成,适合依赖Microsoft软件的企业。

很难学习Linux吗? 很难学习Linux吗? Apr 18, 2025 am 12:23 AM

学习Linux并不难。1.Linux是一个开源操作系统,基于Unix,广泛应用于服务器、嵌入式系统和个人电脑。2.理解文件系统和权限管理是关键,文件系统是层次化的,权限包括读、写和执行。3.包管理系统如apt和dnf使得软件管理方便。4.进程管理通过ps和top命令实现。5.从基本命令如mkdir、cd、touch和nano开始学习,再尝试高级用法如shell脚本和文本处理。6.常见错误如权限问题可以通过sudo和chmod解决。7.性能优化建议包括使用htop监控资源、清理不必要文件和使用sy

Linux软件的未来:Flatpak和Snap会替换本机桌面应用程序吗? Linux软件的未来:Flatpak和Snap会替换本机桌面应用程序吗? Apr 25, 2025 am 09:10 AM

多年来,Linux软件分布依赖于DEB和RPM等本地格式,并深深地根深蒂固。 但是,Flatpak和Snap已经出现,有望成为应用程序包装的通用方法。 本文考试

在Linux中比较文件的前7个工具(示例) 在Linux中比较文件的前7个工具(示例) Apr 28, 2025 am 09:21 AM

本指南探讨了用于比较Linux中文本文件的各种方法,Linux是系统管理员和开发人员的关键任务。 我们将介绍命令行工具和视觉差异工具,突出显示其优势和适当的用例。 假设

Linux和Windows之间的用户帐户管理有什么区别? Linux和Windows之间的用户帐户管理有什么区别? May 02, 2025 am 12:02 AM

Linux和Windows在用户账户管理上的主要区别在于权限模型和管理工具。Linux使用基于Unix的权限模型和命令行工具(如useradd、usermod、userdel),而Windows采用自己的安全模型和图形用户界面(GUI)管理工具。

See all articles