linux系统中怎么调用sys_link
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,本篇文章给大家分享的是有关linux系统中怎么调用sys_link,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。sys_link是创建硬
千家信息网最后更新 2025年01月23日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安全错误
数据库的锁怎样保障安全
域服务器本地连接受限
数据库不小心删除了数据怎么恢复
网络安全工程师考什么大学
一分钟看懂网络安全
网络安全必须学python吗
spss读取mdb数据库
linux 查看数据库表
数据库演讲实践应用
保障网络安全的手段有哪些
NIST数据库几年一更新
平谷服务器交换机回收价格
山东商城软件开发企业
配网中连接服务器失败
敏捷软件开发的特征
河北区有哪些服务器云主机
无线网络技术未来发展趋势
奶茶店销售数据库
金蝶服务器显示不了加密狗
生产安全风险数据库模板
软件开发服务代理费入账
增加数据库的作用
创建网络安全示范单位工作开展
数据库使用费怎么开票
网络安全教育宣传片观后感
网络安全监测装置告警屏蔽
下裁一个服务器
欧卡2几个服务器的区别
不同的站点读取不同的数据库
qt 删除数据库表 数据
克而瑞数据库