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

文本文件和二进制文件

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

目录文件

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

DIR *pdir = NULL;
struct dirent *entry;
pdir = opendir("a.txt");
while(entry = readdir(pdir))
	printf("file name:%s \n",entry->d_name);
close(pdir);

设备文件

包括字符设备文件、块设备文件。设备文件对应硬件设备,是文件系统虚拟制造出来的(虚拟文件系统,如/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则是查看的指向文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值