Linux编程 2.4 文件和目录-Linux文件系统结构

1、文件操作基本元素

  1. 文件操作相关的最基本元素是:目录结构、索引节点和文件的数据本身。
    1. 目录结构(目录项)
    2. 索引节点(i节点)
    3. 文件的数据

2、文件系统的三个区域

属性:

        超级块:存放文件系统本身的结构信息

        i-节点表:存放i-节点信息列表

数据区:存放文件内容

文件访问过程:从文件名到文件内容,在目录中寻找文件名使用编号定位i-节点,i-节点包含数据块的列表。

3、link和unlink函数

注:link函数是创建的硬链接

#include<unistd.h>
int link(const char * existingpath,const char* newpath);
返回:成功返回0,出错返回-1
功能:创建一个指向现存文件链接(硬链接)
int unlink(const char * pathname);
返回:成功返回0,出错返回-1
功能:删除pathname指定的硬链接,并将由pathname所引用的文件链接计数减1.
  • 硬链接创建条件
    • 针对文件创建链接
    • 必须是同一个分区
    • 只有超级用户才能对目录建立链接
  • 文件删除条件
    • 链接计数为0
    • 无其它进程打开该文件

if(link(argv[1],argv[i])<0)
{
	perror("linke error");
	continue;
}

4、硬链接与软链接

4.1使用系统命令创建链接

4.2软链接与硬链接的区别

软链接不能创建数据区域,但有自己的i节点,来指向文件。

硬链接没有自己的i节点,没有自己的单独的数据,只是指向i节点

5、Symlink和readlink函数

#include<unistd.h>
int symlink(const char *actualpath,const char* sympath);
返回:成功返回0,出错返回-1
功能:创建一个符号链接(软链接)
int readlink(const char * pathname,char * buf,size_t bufsize);
返回:成功返回读到的字节数,出错返回-1
功能:打开该链接本身,并读该链接中的名字
  • 符号链接创建
    1. 创建符号链接并不要求actualpath存在
    2. 可以跨文件系统建立符号链接


6、remove和rename函数

#include<unistd.h>
int remove(const char *pathname);
返回:成功返回0,出错返回-1
功能:解除对一个文件或目录的连接

int rename(const char * oldname,const char * newname);
返回:成功返回0,出错返回-1
功能:文件或目录更名

对于文件,remove的功能与unlink相同

对于目录,remove的功能与rmdir相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值