linux系统中怎么调用sys_link
发表于:2025-02-24 作者:千家信息网编辑
千家信息网最后更新 2025年02月24日,本篇文章给大家分享的是有关linux系统中怎么调用sys_link,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。sys_link是创建硬
千家信息网最后更新 2025年02月24日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安全错误
数据库的锁怎样保障安全
网络安全三年行动计划将出台
国际服服务器哪个更好
低分女生可以学计算机网络技术
服务器没有80端口
软件开发如何进入银行
ios软件开发师月薪多少
网络安全客户销售招聘
拼客网络安全
佛山地产软件开发设计
数据库查询记录会保存多久
服务器禁用ssl2.0
学校开展网络安全知识
舰团可以跨服务器
数据库访问失败
湖南元初网络技术有限公司
百家互联网科技有限公司招聘
数据库创建存储在哪里
小花仙怎么没有服务器了
网络安全战队联盟
打印机服务器属性在哪
计算机网络安全怎么就业
提示服务器连接不上
云服务器的数据库容量多大
图书馆数据库三个表
幼儿园网络安全规划
服务器 空间
软件开发构件设计
九方数据库
软件开发专业的自我介绍
samba服务器 安全