首页 > 代码库 > UNIX环境高级编程--4

UNIX环境高级编程--4

函数stat fstat fstatat 和 lstat

  stat函数使用最多的地方可能就是ls -l 命令,用其可以获得有关一个文件的所有信息。

文件类型:

  (1)普通文件

  (2)目录文件

  (3)块特殊文件。这种类型的文件提供对设备带缓冲的访问,每次访问以固定长度为单位进行。

  (4)字符特殊文件:这种类型的文件提供对设备不带缓冲的访问,每次访问的长度可变。

  (5)FIFO:这种类型的文件用于进程间通信,也叫做命名管道

  (6)套接字:用于进程间的网络通讯,也可以用在一台宿主机上进程间的非网络通信。

  (7)符号链接:这种类型的文件指向另一个文件。

      链接有两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link,也叫做软链接)。默认情况下,ln命令产生硬链接。

      首先,符号链接属于软连接。直观感觉上,软连接类似于"浅拷贝"。只是复制了一份具有时效性的文件信息。不像硬链接一样,和原始文件息息相关的感觉。详情如下:      

##########################################

(一)硬链接

1.产生硬链接的语法

# ln 源文件 目标文件  (注意:不能为目录创建硬链接)

2.关于inode

inode 译成中文就是索引节点。每个存储设备或存储设备的分区(存储设备是硬盘、软盘、U盘 ... ... )被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是Block,Block是用来存储数据用的。而inode呢,就是用来存储这些数 据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令, 能通过inode值最快的找到相对应的文件。

硬连接指通过索引节点来进行的连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号 (Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户 就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和 其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件才会被真正删除。

3.inode相同的文件是硬链接文件

 在Linux 文件系统中,inode值相同的文件是硬链接文件,也就是说,不同的文件名,inode可能是相同的,一个inode值可以对应多个文件。

 inode值相同的文件,他们的关系是互为硬链接的关系。当我们修改其中一个文件的内容时,互为硬链接的文件的内容也会跟着变化。如果我们删除互为硬链接关系的某个文件时,其它的文件并不受影响。

(二)软链接(符号链接

与硬连接相对应,Lnux系统中还存在另一种连接,称为符号连接(Symbilc Link),也叫软连接。软链接文件有点类似于Windows的快捷方式。它实际上是特殊文件的一种。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

1.产生软链接的语法

     # ln -s 源文件或目录 目标文件或目录

   2.关于软链接

    软链接也叫符号链接,它和硬链接有所不同,软链接文件只是其源文件的一个标记。当我们删除了源文件后,链接文件不能独立存在,虽然仍保留文件名,但我们却不能查看软链接文件的内容了。

    值得我们注意的是:当我们修改链接文件的内容时,就意味着我们在修改源文件的内容。当然源文件的属性也会发生改变,链接文件的属性并不会发生变化。当我们 把源文件删除后,链接文件只存在一个文件名,因为失去了源文件,所以软链接文件也就不存在了。这一点和硬链接是不同的;

(三)示例

touch f1(创建一个f1的文件)

ln f1 f2 创佳一个f2的硬连接

ln -s f1 f3 创建一个f3的软连接

此时如果删除f3,对f1,f2无影响;如果删除f2,对f1,f3也无影响,如果删除f1,那么因为f2也应用f1,所以并不影响f2节 点的,touch 创建的文件仍然存在;但是此时f3因为是软连接,导致f3失效。如果删除f1,f2 ,那么touch 创佳的文件会被删除

##########################################

 

UNIX环境高级编程--4