linux系统中怎么调用sys_link
发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,本篇文章给大家分享的是有关linux系统中怎么调用sys_link,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。sys_link是创建硬
千家信息网最后更新 2025年12月04日linux系统中怎么调用sys_link
本篇文章给大家分享的是有关linux系统中怎么调用sys_link,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
sys_link是创建硬链接的函数,从这个函数的代码中我们看到,硬链接的原理。文件查找和操作函数见之前的文章。这里就不贴了。
// 创建硬链接
int sys_link(const char * oldname, const char * newname)
{
struct dir_entry * de;
struct m_inode * oldinode, * dir;
struct buffer_head * bh;
const char * basename;
int namelen;
// 根据路径名找到文件的inode节点
oldinode=namei(oldname);
if (!oldinode)
return -ENOENT;
// 不能给目录创建硬链接
if (S_ISDIR(oldinode->i_mode)) {
// 不需要使用inode了,解除引用
iput(oldinode);
return -EPERM;
}
// 找出newname最后一级目录的inode和newname中的文件名
dir = dir_namei(newname,&namelen,&basename);
// 路径不存在
if (!dir) {
iput(oldinode);
return -EACCES;
}
// 路径是一个目录,所以文件名是空
if (!namelen) {
iput(oldinode);
iput(dir);
return -EPERM;
}
// 不能跨文件系统创建硬链接
if (dir->i_dev != oldinode->i_dev) {
iput(dir);
iput(oldinode);
return -EXDEV;
}
// 权限检验
if (!permission(dir,MAY_WRITE)) {
iput(dir);
iput(oldinode);
return -EACCES;
}
// 在目录下找文件名等于basename的项
bh = find_entry(&dir,basename,namelen,&de);
// 找到的话说明文件名已经存在,则不能再创建
if (bh) {
brelse(bh);
iput(dir);
iput(oldinode);
return -EEXIST;
}
// 没有则新增一个目录项,de保存找到的目录项
bh = add_entry(dir,basename,namelen,&de);
// 新增是否成功
if (!bh) {
iput(dir);
iput(oldinode);
return -ENOSPC;
}
// 硬链接的inode和旧文件的inode号一样
de->inode = oldinode->i_num;
// 新增了一项,需要回写硬盘
bh->b_dirt = 1;
brelse(bh);
iput(dir);
// 引用数加1,创建硬链接即多了一个索引指向inode节点,所以inode引用数加一即可,为0才能删除文件
oldinode->i_nlinks++;
oldinode->i_ctime = CURRENT_TIME;
// inode信息有更新,需要回写硬盘
oldinode->i_dirt = 1;
iput(oldinode);
return 0;
}
结构如下。
以上就是linux系统中怎么调用sys_link,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
文件
链接
目录
文件名
系统
函数
路径
文章
更多
知识
硬盘
篇文章
节点
实用
成功
代码
信息
原理
就是
工作会
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
通信网络技术的基本知识
贵州网络安全系统好不好
奉化嵌入式软件开发周期
聊呗app自动加人软件开发
中国软件开发有哪些公司吗
软件开发的店名
店铺管理系统数据库设计报告
软件开发一个人做的来吗
网络安全新题目
沙漠地图什么时候有服务器
视频直播软件开发技术
世界软件开发大赛
陕师大数据库原理考试
五大网络安全新机遇
服务器安全防护哪家好
浙江dns首选服务器云服务器
网吧无盘服务器配
护苗网络安全进课堂为主题的绘画
cs1.6服务器命令
csgo广州服务器
基站网络安全心得
东川区上门软件开发咨询报价
顺义区品牌软件开发技术指导
广播电视 技能 网络安全
软件开发能年薪百万么
香港服务器免费
网络安全进课堂主题班会课件
四川学习软件开发排行榜
中国软件开发市场全球
5g网络安全周