第三十四节 Linux系统编程- Linux系统编程管理文件和目录-硬链接,软链接和解除链接(十)

本文介绍了Linux系统编程中的硬链接、软链接(符号链接)和解除链接的概念及其实现。通过示例展示了如何使用link、symlink和unlink函数进行操作,并提供了实验步骤和结果分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-------------------------------------资源来源于网络,仅供自学使用,如有侵权,联系我必删.

第一:

 硬链接和软链接基本概念
– 硬链接类似于拷贝,但与源文件同步更新,权限、大小、时间值均与源文件一样,inode也与源文件相同

--和硬链接对应的是软链接,也可以叫符号链接或者 symlinks,软连接不是文件系统的文件名和 inode 的映射,而是一种指针,在运行的时候解释

前面介绍的 linux 命令中,有 ln 命令可以创建链接,如下图所示,使用“man ln”查看一下。

如上图所示,可以看到关于ln的功能描述。它是用来创建一个TARGET到真实的文件的link(链接)。这也算是 linux 中一种特殊的文件,就像 windows 下的快捷方式,也属于 window下的文件。

 

第二:

实验-硬链接 link

使用 man 学习 link 函数

1)如下图所示,使用命令“man 2 link”

2)如下图所示,函数 link

3)接着注意一下相关的函数,如下图所示

4)最后介绍一下 link 函数。

int link(const char *oldpath, const char *newpath);
参数*oldpath:已有的文件路径。
参数*newpath:新建的硬链接文件路径。
返回值:成功返回 0,错误返回-1。

 

第三:

link 函数例程

1)编写简单的 link.c 文件测试 link 函数

#include <stdio.h>
//link函数头文件
#include <unistd.h>

int main(int argc,char *argv[])
{
	int ret;
	//测试 main 函数传递的参数
	if(argc <3){
		printf("\nPlease input file path\n");
		return 1;
	}

//测试link函数
//使用函数 link,给 argv[1]和 argv[2]建立 link 硬链接
	ret = link(argv[1],argv[2]);
	if(ret)
	{
		printf("link failed");
		return 1;
	}
	printf("link %s to %s success!\n",argv[1],argv[2]);
	
	return 0;
}

2)编译运行测试

a)在 Ubuntu 系统下,如下图所示,进入前面实验创建的目录“/home/linuxsystemcode/CatlogFile”,将源码 link.c 拷贝进去,进入文件夹 CatlogFile,如下图所示。

b)使用命令“arm-none-linux-gnueabi-gcc -o link link.c -static”编译 link 文件,如下图所示,使用命令“ls”可以看到生成了 link 可执行文件

c)拷贝到挂载点

d)开发板使用 vi 编辑器新建一个 linktest.c 文件,文件中内容为“hello linux link!”

e)开发板挂在后运行文件

在link的目录下创建linktest.c文件,运行后可以看到硬链接建立的完全一样的文件,inode 是相同的

f)使用 vi 命令打开 linktest,查看其中的内容

 

 

---------------------------------------------------------------------------------------------------------------

第四:

实验-符号链接 symlink

符号链接也叫软链接-symlink

 使用 man 学习 symlink 函数

1)如下图所示,使用命令“man 2 symlink”

如下图所示,函数 symlink 和 link 函数用法差不多

接着注意一下相关的函数,如下图所示

 

2)接着介绍一下 symlink 的用法

软链接函数
• int symlink(const char *oldpath, const char *newpath);
– 参数*oldpath:已有的文件路径
– 参数*newpath:新建的符号链接文件路径
– 返回值:成功返回0,错误返回-1

 

第五:

编写简单的 symlink.c 文件测试 symlink 函数

#include <stdio.h>
//symlink函数头文件
#include <unistd.h>

int main(int argc,char *argv[])
{
	int ret;
	
    //测试 main 函数的参数
	if(argc <3){
		printf("\nPlease input file path\n");
		return 1;
	}

//测试symlink函数
//使用 symlink 函数给 argv[1],argv[2]建立符号连接(软连接)
	ret = symlink(argv[1],argv[2]);
	if(ret)
	{
		printf("symlink failed");
		return 1;
	}
	printf("symlink %s to %s success!\n",argv[1],argv[2]);
	
	return 0;
}

 

第六:

编译运行测试

1)在 Ubuntu 系统下,如下图所示,进入前面实验创建的目录“/home/linuxsystemcode/CatlogFile”,将源码 symlink.c 拷贝进去,进入文件夹CatlogFile,如下图所示

2)使用命令“arm-none-linux-gnueabi-gcc -o symlink symlink.c -static”编译 symlink文件,如下图所示,使用命令“ls”可以看到生成了 symlink 可执行文件。

3)将文件拷贝到挂载点

4)在开发版挂载后,使用程序给前一个实验中 linktest.c 文件建立软连接,如下图所示

5)如下图所示,使用 ls 命令查看新建的软连接文件,可以发现和之前的并不是同一个文件,inode 不一样,说明是不同的文件

6)打开之后也是显示同样的内容,其中链接到 linktest.c 的软链接文件 symlink.c 之后显示的也是同样的内容,如下图所示

 

---------------------------------------------------------------------------------------------------------------

第七:

实验-解除链接 unlink

解除链接unlink

使用 man 学习 unlink 函数

1)如下图所示,使用命令“ man 2 unlink”

2)如下图所示,函数 unlink

3)接着注意一下相关的函数,如下图所示

4)接着介绍一下 unlinke 的用法

解除链接函数
• int unlink(const char *pathname);
– 参数*pathname:链接文件的路径
– 返回值:成功返回0,错误返回-1
– unlink指向软链接,删除软链接;指向最后一个硬链接,相当于删除文件

 

第八:

unlink 函数例程

编写简单的 unlink.c 文件测试 unlink 函数

#include <stdio.h>
//unlink函数头文件
#include <unistd.h>

int main(int argc,char *argv[])
{
	int ret;
	
    //测试 main 函数的参数
	if(argc <2){
		printf("\nPlease input file path\n");
		return 1;
	}

    //测试unlink函数
    //使用 unlink 函数将 argv[1]文件的软连接或者硬链接取消
	ret = unlink(argv[1]);
	if(ret)
	{
		printf("unlink failed");
		return 1;
	}
	printf("unlink %s is success!\n",argv[1]);
	
	return 0;
}

第九:

编译运行测试

1)在 Ubuntu 系统下,如下图所示,进入前面实验创建的目录
“/home/linuxsystemcode/CatlogFile”,将源码 unlink.c 拷贝进去,进入文件夹 CatlogFile,如下图所示。

2)使用命令“arm-none-linux-gnueabi-gcc -o unlink unlink.c -static”编译 unlink 文件,
如下图所示,使用命令“ls”可以看到生成了 unlink 可执行文件

3)将文件拷贝到挂载点

4)在开发板挂载后,使用命令“./mnt/udisk/unlink symlink.c”运行程序如下所示,这里取消了前一个实验建立的软连接文件。

使用 ls 命令查看链接文件,已经消失了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值