您的位置:首页 > 运维架构 > Linux

linux应用基础知识点4-文件的分类和属性

2020-04-22 01:38 197 查看

linux应用基础知识点4-文件的分类和属性

文本文件和二进制文件

文本文件是按照一定编码格式存储的文件(其实质也是二进制数字,不过有编码规则可循),二进制文件存储的是纯粹的二进制数字(如gcc生成的bin文件)。
linux本身并不区别对待这两种文件,当我们使用文本编辑器如vi、gedit等打开一个文件时,编辑器会读出文件的二进制数字,然后按照编码格式去解码还原成文字给用户看。

目录文件

是一种特殊的文件,可以vi查看其内容,包括文件的路径、目录中包含的子文件等等信息。
也可用opendir与readdir函数读取其内容:
opendir打开一个目录后返回一个DIR类型的指针,readdir可通过该指针得到一个dirent类型的结构体,该结构体即包含了一个子文件的inode name等信息。readdir一次调用返回一个子文件,可以多次调用继续读取其它子文件。
由于readdir函数每次调用都对下次调用有影响,即该函数是不可重入函数,有一定的隐患。于是c标准库提供了一个可重入版本(一般在原函数后加“_r”)readdir_r。

设备文件

包括字符设备文件、块设备文件。设备文件对应硬件设备,是文件系统虚拟制造出来的(虚拟文件系统,如/dev /sys /proc等),并不是真正存在于硬盘上的文件。虚拟文件系统大多不能直接读写,而是通过特殊API来读写或生成的。

管道文件:略

套接字文件:略

符号链接文件

硬链接:一个文件对应一个inode,而一个inode如果对应多个文件名,则称该文件名为硬链接。硬链接相当于一个文件的别名,它们有共同的inode。(一个目录中的./和…/文件即为硬链接)
软链接:有自己的inode号以及用户数据块,有自己的文件属性及权限。当原文件删除时,该软链接就变成了一个死链接。

各类文件的属性字符

通过ls -l查看文件的详细信息,其中属性字段的第一个字符即代表文件的类型。
-:普通文件
d: 目录文件
p:管道文件
s: 套接字文件
b:块设备文件
c:字符设备文件
l:符号链接文件

文件的属性

文件的属性,如大小、类别、权限等信息是存在于文件中的,可以通过stat、fstat、lstat这些API来获取属性信息。

stat函数

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

buf为输出型参数,用来获取文件属性。可以使用S_ISREG、S_ISDIR、S_ ISCHR等函数对获取的属性buf.st_mode进行判断,是否为普通文件、目录文件、字符设备文件。

fstat函数

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

fstat与stat类似,区别是输入对象是打开的文件描述符,而不是路径。

lstat函数

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

当文件为符号链接文件时,lstat查看的是符号链接本身,而fstat和stat则是查看的指向文件。

  • 点赞
  • 收藏
  • 分享
  • 文章举报
皮诺Kio 发布了17 篇原创文章 · 获赞 0 · 访问量 139 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: