嵌入式Linux:Linux系统中文件类型

目录

1、普通文件

2、目录文件

3、字符设备文件

4、块设备文件

5、符号链接文件

6、套接字文件

7、管道文件

8、stat命令和ls命令

8.1、stat命令

8.2、ls命令

9、stat、fstat、lstat函数

9.1、stat函数

9.2、fstat函数

9.3、lstat函数


在Windows系统中,操作系统通常通过文件名后缀来识别文件类型。例如,C语言头文件使用“.h”后缀,C语言源文件使用“.c”后缀,文本文件使用“.txt”后缀,压缩包文件使用“.zip”后缀。打开文件时,Windows会根据文件名后缀确定文件类型,然后调用相应的程序打开它。例如,打开“.c”文件时会使用C代码编辑器,打开“.zip”文件时会使用解压软件。

然而,在Linux系统中,文件类型并不是通过文件后缀名来识别的。这并不意味着文件名后缀可以随意添加。文件名和后缀主要是为了方便“人”查看和识别。尽管Linux系统不依赖后缀来识别文件,但规范地使用后缀仍然很重要。例如,C源文件应以“.c”结尾,C头文件应以“.h”结尾,Shell脚本文件应以“.sh”结尾。这是为了方便我们自己查看和管理文件。

在Linux系统中,共有七种文件类型:

  • 普通文件;
  • 目录文件;
  • 字符设备文件;
  • 块设备文件;
  • 符号链接文件;
  • 套接字文件;
  • 管道文件。

1、普通文件

普通文件(regular file)是Linux系统中最常见的文件类型,如文本文件、二进制文件以及我们编写的源代码文件等。普通文件中的数据存储在系统磁盘中,可以访问和读取这些文件中的内容,文件内容以字节为单位进行存储和访问。

普通文件可以分为两大类:文本文件和二进制文件。

文本文件:文本文件的内容由ASCII码字符构成。虽然文件本质上都是数字(因为计算机只识别0和1,磁盘上的文件内容也是由0和1构成),但文本文件中的数字应该被理解为对应的ASCII字符码。例如,常见的.c、.h、.sh、.txt文件都是文本文件。文本文件的优点是方便人类阅读、浏览和编写。

示例:

cat example.txt

二进制文件:二进制文件中存储的也是数字,但这些数字不是文本字符编码,而是真正的数值。例如,Linux系统下的可执行文件、C代码编译后的.o文件、.bin文件等都是二进制文件。

示例:

hexdump -C example.bin

2、目录文件

目录文件(directory file)是用于组织和管理其他文件和子目录的特殊文件。目录文件包含指向其他文件和目录的列表,使得文件系统具有层次结构。目录文件的主要作用是提供一种方式来组织文件系统中的数据,使得文件和目录可以以一种树状结构进行管理。

3、字符设备文件

字符设备文件(Character Device File)是一种特殊的文件类型,用于与字符设备进行直接的字符流通信。字符设备通常是那些可以一次一个字符地读写的设备,如键盘、鼠标、串口(serial port)和终端(terminal)。

4、块设备文件

块设备文件(block device file)是一种特殊的文件类型,用于与块设备进行交互。块设备是一种数据存储设备,允许以固定大小的块(通常为512字节或更大的倍数)进行数据读写操作。常见的块设备包括硬盘、光盘、USB存储设备等。

下图中agpgart、autofs、btrfs-control、console 等这些都是字符设备文件,而 loop0、loop1这些便是块设备文件。

5、符号链接文件

符号链接文件(symbolic link file,也称为软链接)是一种特殊的文件类型,用于指向另一个文件或目录。符号链接类似于Windows系统中的快捷方式。符号链接文件包含指向目标文件或目录的路径,而不是文件内容本身。它们允许用户方便地访问和管理文件和目录。

在上图中,cdrom、cdrw、fd、initctl等这些文件都是符号链接文件,箭头所指向的文件路径便是符号链接文件所指向的文件。

6、套接字文件

套接字文件是Linux系统中用于进程间通信的特殊文件类型,常用于本地进程间通信。它们允许同一台机器上的进程通过文件系统中的套接字文件进行通信。通过使用编程接口,可以方便地创建和管理套接字文件,实现高效的进程间通信。

7、管道文件

管道文件(pipe)是一种特殊的文件类型,用于在进程间进行通信。管道文件提供了一种单向数据流的机制,其中一个进程向管道写入数据,而另一个进程从管道读取数据。管道文件在命令行中广泛用于将一个命令的输出传递给另一个命令作为输入。

8、stat命令和ls命令

stat 命令和 ls 命令是Linux系统中常用的两个命令,用于查看文件和目录的详细信息。

8.1、stat命令

stat 命令用于显示文件或文件系统的详细状态信息。它提供的信息包括文件的大小、权限、所有者、修改时间、访问时间等。

查看单个文件的信息:

stat example.txt

输出示例:

File: example.txt
Size: 1234            Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d    Inode: 1234567     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/  user)   Gid: ( 1000/  user)
Access: 2024-06-06 12:00:00.000000000 +0000
Modify: 2024-06-06 12:00:00.000000000 +0000
Change: 2024-06-06 12:00:00.000000000 +0000
Birth: -

查看目录的信息:

stat /home/user

输出示例:

File: /home/user
Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: 803h/2051d    Inode: 567890      Links: 2
Access: (0755/drwxr-xr-x)  Uid: ( 1000/  user)   Gid: ( 1000/  user)
Access: 2024-06-06 12:00:00.000000000 +0000
Modify: 2024-06-06 12:00:00.000000000 +0000
Change: 2024-06-06 12:00:00.000000000 +0000
Birth: -

8.2、ls命令

ls 命令用于列出目录内容。它有很多选项,可以显示文件的各种信息,如权限、所有者、大小和修改时间等。

显示详细信息:

ls -l

输出示例:

total 12
-rw-r--r-- 1 user user 1234 Jun  6 12:00 example.txt
drwxr-xr-x 2 user user 4096 Jun  6 12:00 documents
drwxr-xr-x 3 user user 4096 Jun  6 12:00 projects

示例参数说明:

  • ' - ':代表普通文件,即包含文本内容或二进制数据的文件。
  • ' d ':代表目录文件,用于存储其他文件或目录的容器。
  • ' c ':代表字符设备文件,用于与字符设备进行通信,如终端设备或串行端口。
  • ' b ':代表块设备文件,用于与块设备进行通信,如硬盘驱动器或磁盘分区。
  • ' l ':代表符号链接文件,用于指向其他文件或目录的路径。
  • ' s ':代表套接字文件,用于进程间通信,通常用于网络通信或本地通信。
  • ' p ':代表管道文件,用于进程间通信,允许单向数据流的传输。

通过使用这些命令,可以方便地查看文件和目录的详细信息,以便更好地管理和操作系统中的文件。

9、statfstatlstat函数

statfstatlstat 是Linux中用于获取文件属性的系统调用函数。它们的主要作用是读取文件的元数据,如文件大小、权限、所有者等。以下是这三个函数的详细说明、作用和使用方法。

  • stat:获取指定路径文件的属性信息,解析符号链接指向的文件。
  • fstat:获取通过文件描述符指定的文件的属性信息。
  • lstat:获取指定路径文件的属性信息,如果是符号链接,返回链接本身的属性。

这些函数在文件管理和系统编程中非常重要,能够帮助开发者获取文件的详细信息并进行相应处理。理解它们的用法和区别对于编写高效、健壮的程序至关重要。

在Linux中,statfstat、和lstat函数都使用同一个结构体struct stat来存储文件的元数据。这个结构体包含了文件的多种属性信息,如文件大小、文件类型、权限、所有者、时间戳等。

struct stat结构体定义在头文件<sys/stat.h>中。它的典型定义如下:

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>struct stat {dev_t     st_dev;         /* 文件的设备ID */ino_t     st_ino;         /* 文件的索引节点号 */mode_t    st_mode;        /* 文件的类型和权限 */nlink_t   st_nlink;       /* 硬链接数 */uid_t     st_uid;         /* 所有者用户ID */gid_t     st_gid;         /* 所有者组ID */dev_t     st_rdev;        /* 特殊设备ID(如果此文件是设备文件) */off_t     st_size;        /* 文件大小,以字节为单位 */blksize_t st_blksize;     /* 文件系统I/O的块大小 */blkcnt_t  st_blocks;      /* 分配给此文件的512字节块的数量 */time_t    st_atime;       /* 最后一次访问时间 */time_t    st_mtime;       /* 最后一次修改时间 */time_t    st_ctime;       /* 最后一次状态改变时间(元数据) */
};

各字段的含义如下:

  • st_dev:表示文件所在设备的设备号。文件系统中,每个设备都有一个唯一的设备号。
  • st_ino:表示文件的索引节点号(inode number),它是文件在文件系统中的唯一标识。
  • st_mode:表示文件的类型和权限。使用位掩码可以提取出文件类型和权限信息。
  • st_nlink:表示文件的硬链接数量。一个文件可以有多个硬链接,它们共享同一个索引节点。
  • st_uid:表示文件所有者的用户ID。
  • st_gid:表示文件所有者的组ID。
  • st_rdev:如果文件是字符设备或块设备文件,则此字段表示设备号。
  • st_size:表示文件的大小,以字节为单位。
  • st_blksize:表示文件系统I/O的块大小。
  • st_blocks:表示分配给文件的512字节块的数量。
  • st_atime:表示文件最后一次访问的时间。
  • st_mtime:表示文件最后一次修改的时间。
  • st_ctime:表示文件最后一次状态改变的时间(例如,权限修改)。

9.1、stat函数

int stat(const char *path, struct stat *buf);

参数

  • path:文件路径。
  • buf:指向stat结构体的指针,用于存储文件属性信息。

返回值

  • 成功时返回0。
  • 失败时返回-1,并设置errno来指示错误。

作用: 获取指定路径文件的属性信息。

示例如下:

#include <stdio.h>
#include <sys/stat.h>
#include <time.h>int main() {struct stat fileStat;if (stat("example.txt", &fileStat) < 0) {perror("stat");return 1;}printf("File Size: %ld bytes\n", fileStat.st_size);printf("Number of Links: %lu\n", fileStat.st_nlink);printf("File inode: %lu\n", fileStat.st_ino);printf("File Permissions: ");printf((S_ISDIR(fileStat.st_mode)) ? "d" : "-");printf((fileStat.st_mode & S_IRUSR) ? "r" : "-");printf((fileStat.st_mode & S_IWUSR) ? "w" : "-");printf((fileStat.st_mode & S_IXUSR) ? "x" : "-");printf((fileStat.st_mode & S_IRGRP) ? "r" : "-");printf((fileStat.st_mode & S_IWGRP) ? "w" : "-");printf((fileStat.st_mode & S_IXGRP) ? "x" : "-");printf((fileStat.st_mode & S_IROTH) ? "r" : "-");printf((fileStat.st_mode & S_IWOTH) ? "w" : "-");printf((fileStat.st_mode & S_IXOTH) ? "x" : "-");printf("\n");return 0;
}

9.2、fstat函数

int fstat(int fd, struct stat *buf);

参数

  • fd:文件描述符。
  • buf:指向stat结构体的指针,用于存储文件属性信息。

返回值

  • 成功时返回0。
  • 失败时返回-1,并设置errno来指示错误。

作用: 获取通过文件描述符指定的文件的属性信息。

示例如下:

#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>int main() {struct stat fileStat;int fd = open("example.txt", O_RDONLY);if (fd < 0) {perror("open");return 1;}if (fstat(fd, &fileStat) < 0) {perror("fstat");close(fd);return 1;}printf("File Size: %ld bytes\n", fileStat.st_size);printf("Number of Links: %lu\n", fileStat.st_nlink);printf("File inode: %lu\n", fileStat.st_ino);close(fd);return 0;
}

9.3、lstat函数

int lstat(const char *path, struct stat *buf);

参数

  • path:文件路径。
  • buf:指向stat结构体的指针,用于存储文件属性信息。

返回值

  • 成功时返回0。
  • 失败时返回-1,并设置errno来指示错误。

作用: 获取指定路径文件的属性信息,但如果路径是符号链接,返回链接本身的属性,而不是链接指向的文件。

示例如下:

#include <stdio.h>
#include <sys/stat.h>int main() {struct stat fileStat;if (lstat("symlink", &fileStat) < 0) {perror("lstat");return 1;}printf("File Size: %ld bytes\n", fileStat.st_size);printf("Number of Links: %lu\n", fileStat.st_nlink);printf("File inode: %lu\n", fileStat.st_ino);printf("File Permissions: ");printf((S_ISLNK(fileStat.st_mode)) ? "l" : "-");printf((fileStat.st_mode & S_IRUSR) ? "r" : "-");printf((fileStat.st_mode & S_IWUSR) ? "w" : "-");printf((fileStat.st_mode & S_IXUSR) ? "x" : "-");printf((fileStat.st_mode & S_IRGRP) ? "r" : "-");printf((fileStat.st_mode & S_IWGRP) ? "w" : "-");printf((fileStat.st_mode & S_IXGRP) ? "x" : "-");printf((fileStat.st_mode & S_IROTH) ? "r" : "-");printf((fileStat.st_mode & S_IWOTH) ? "w" : "-");printf((fileStat.st_mode & S_IXOTH) ? "x" : "-");printf("\n");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/30632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】已完美解决:(Python键盘中断报错问题) KeyboardInterrupt

文章目录 一、问题背景二、可能出错的原因三、错误代码示例四、正确代码示例&#xff08;结合实战场景&#xff09;五、注意事项 已解决&#xff1a;Python中处理KeyboardInterrupt&#xff08;键盘中断&#xff09;报错问题 一、问题背景 在Python编程中&#xff0c;当我们运…

Java | Leetcode Java题解之第167题两数之和II-输入有序数组

题目&#xff1a; 题解&#xff1a; class Solution {public int[] twoSum(int[] numbers, int target) {int low 0, high numbers.length - 1;while (low < high) {int sum numbers[low] numbers[high];if (sum target) {return new int[]{low 1, high 1};} else i…

人工智能指数报告

2024人工智能指数报告&#xff08;一&#xff09;&#xff1a;研发 前言 全面分析人工智能的发展现状。 从2017年开始&#xff0c;斯坦福大学人工智能研究所&#xff08;HAI&#xff09;每年都会发布一份人工智能的研究报告&#xff0c;人工智能指数报告&#xff08;AII&…

数据结构:快速排序,归并排序,计数排序的实现分析

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 小新的主页&#xff1a;编程版小新-CSDN博客 1.快排 1.1算法思想 选择一个基准元素&#xff0c;…

服务器SSH 免密码登录

1. 背景 为了服务器的安全着想&#xff0c;设置的服务器密钥非常长。但是这导致每次连接服务器都需要输入一长串的密码&#xff0c;把人折腾的很痛苦&#xff0c;所以我就在想&#xff0c;能不能在终端SSH的时候无需输入密码。 windows 可以使用 xshell 软件&#xff0c;会自…

安装react之nvm版本低引起的问题

1.背景 准备搭建一个react&#xff0c;然后看官网文档 创建项目&#xff0c;使用命令行 npx create-next-applatest 创建项目的流程都是正常的。当我准备运行项目的时候&#xff0c;报错了 原先的报错没有了&#xff0c;从网上找了一个类似的 重要的内容是&#xff1a;当前…

锂电池寿命预测 | Matlab基于ARIMA的锂电池寿命预测

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 锂电池寿命预测 | Matlab基于ARIMA的锂电池寿命预测 NASA数据集&#xff0c;B0005号电池&#xff0c;选择前110个数据训练&#xff0c;后58个数据测试预测。程序包含去趋势线、差分、平稳化及AIC准则判定p和q。命令窗…

【调试笔记-20240619-Windows-Typescripts中类型不匹配的解决方法】

调试笔记-系列文章目录 调试笔记-20240619-Windows-Typescripts中类型不匹配的解决方法 文章目录 调试笔记-系列文章目录调试笔记-20240619-Windows-Typescripts中类型不匹配的解决方法 前言一、调试环境操作系统&#xff1a;Windows 10 专业版调试环境调试目标 二、调试步骤搜…

webstorm yarn环境配置

1. 安装nodejs https://nodejs.cn/download/ 2. 安装npm npm i yarn -g3.下载并安装webstorm https://www.jetbrains.com/webstorm/ 4. 打开settings确认node和yarn的配置正确5. 打开项目更新包 yarn install

数据分析第十一讲:pandas应用入门(六)

pandas应用入门&#xff08;六&#xff09; 我们再来看看Index类型&#xff0c;它为Series和DataFrame对象提供了索引服务&#xff0c;有了索引我们就可以排序数据&#xff08;sort_index方法&#xff09;、对齐数据&#xff08;在运算和合并数据时非常重要&#xff09;并实现…

技术与创意并驾齐驱:打造扭蛋机小程序的独特魅力

引言 扭蛋机小程序以其独特的玩法和吸引力&#xff0c;在移动互联网市场中崭露头角。本文将深入探讨如何通过技术与创意的并驾齐驱&#xff0c;打造扭蛋机小程序的独特魅力。 一、技术驱动&#xff1a;打造稳定高效的小程序平台 在扭蛋机小程序的开发过程中&#xff0c;技术是…

Java swing JTable 示例

代码&#xff0c; import java.awt.Container; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable;public class Mylmlk {public static void main(String[] agrs){JFrame framenew JFrame("学生成绩表");frame.setSize(500,2…

Hadoop升级失败,File system image contains an old layout version -64

原始版本 Hadoop 3.1.3 升级版本 Hadoop 3.3.3 报错内容如下 datasophon 部署Hadoop版本 查看Hadoop格式化版本 which hadoop-daemon.sh/bigdata/app/hadoop-3.1.3/sbin/hadoop-daemon.sh删除原来的旧版本 rm -rf /bigdata/app/hadoop-3.1.3查看环境变量 env|grep HADOOPHAD…

【归档】maven的使用

学习自波波酱老师SSM企业级框架最全教学视频 maven篇 maven的设置 <?xml version"1.0" encoding"UTF-8"?> <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&qu…

定制汽车霍尔传感器

磁电效应霍尔传感器、饱和霍尔传感器、非线性霍尔传感器 霍尔传感器原理 霍尔传感器的工作原理基于霍尔效应&#xff0c;即当一块通有电流的金属或半导体薄片垂直地放在磁场中时&#xff0c;薄片的两端会产生电位差。这种现象称为霍尔效应&#xff0c;两端具有的电位差值称为…

嵌入式实验---实验二 中断功能实验

一、实验目的 1、掌握STM32F103中断程序设计流程&#xff1b; 2、熟悉STM32固件库的基本使用。 二、实验原理 1、在上一章的实验基础上&#xff0c;添加一个按键和一个LED&#xff1b; 2、使用中断的方式实现以下两个功能&#xff1a; &#xff08;1&#xff09;KEY1按键…

【git】gitee仓库本地克隆失败可能的一种解决办法

出错点&#xff1a; 在 gitee 克隆远程仓库到 本地时&#xff0c;可能会出现以下报错情况&#xff0c;无法成功克隆 正常流程&#xff1a;&#xff08;熟悉正常克隆流程的可以直接跳到下面的【解决办法】&#xff09; 我们一般复制仓库地址是在下面红线框框的位置&#xff0c…

华为云与AWS负载均衡服务深度对比:性能、成本与可用性

随着云计算的迅速发展&#xff0c;企业对于云服务提供商的选择变得越来越关键。在选择云服务提供商时&#xff0c;负载均衡服务是企业关注的重点之一。我们九河云将深入比较两大知名云服务提供商华为云和AWS的负载均衡服务&#xff0c;从性能、成本和可用性等方面进行对比。 AW…

知识库的创建(4) - KBServiceFactory:获取不同类型知识库服务的工厂类

文章目录 前言一、 方法详解1. get_service2. get_service_by_name3. get_default 二、 代码注释总结 前言 上一篇我们在update_docs里看到了 KBServiceFactory.get_service_by_name(knowledge_base_name)&#xff0c;这一篇我们一起来看看KBServiceFactory类 KBServiceFactor…

Vue--》从零开始打造交互体验一流的电商平台(三)

今天开始使用 vue3 + ts 搭建一个电商项目平台,因为文章会将项目的每处代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的github上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多关注本专栏,学习更多…