linux系统中怎么调用sys_close
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,今天就跟大家聊聊有关linux系统中怎么调用sys_close,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1 根据文件描述符,把指针数组对应
千家信息网最后更新 2025年12月02日linux系统中怎么调用sys_close
今天就跟大家聊聊有关linux系统中怎么调用sys_close,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
1 根据文件描述符,把指针数组对应项置空。
2 如果指向的file结构也没有其他进程使用了,则file结构体可以重用。但是他指向的inode节点需要回写到硬盘。具体参考iput函数。
// 解除文件描述符->file结构体->inode的关联
int sys_close(unsigned int fd)
{
struct file * filp;
if (fd >= NR_OPEN)
return -EINVAL;
// 清除close_on_exec标记,该标记表示fork+exec时关闭该文件
current->close_on_exec &= ~(1< if (!(filp = current->filp[fd]))
return -EINVAL;
// 当前进程的文件描述符指针置空
current->filp[fd] = NULL;
if (filp->f_count == 0)
panic("Close: file count is 0");
// file结构引用数减一,非0说明还有其他进程或描述符在使用该结构,所以还不能释放file和inode
if (--filp->f_count)
return (0);
// 没有进程使用了则释放该inode或需要回写到硬盘
iput(filp->f_inode);
return (0);
}
// 释放inode,如果没有被引用了,则销毁,否则引用数减一即可
void iput(struct m_inode * inode)
{
if (!inode)
return;
// 有进程在使用该inode则阻塞
wait_on_inode(inode);
// 没有进程引用该inode
if (!inode->i_count)
panic("iput: trying to free free inode");
// 管道inode
if (inode->i_pipe) {
// 唤醒等待队列,因为该管道可能要被销毁了,不然那会使等待者无限等待,这句是不是可以放到if后
wake_up(&inode->i_wait);
// 引用数减一,还有进程在引用则先不销毁
if (--inode->i_count)
return;
// 释放管道对应的一页大小
free_page(inode->i_size);
// 该inode可以重用,因为inode指向inode_table的元素
inode->i_count=0;
inode->i_dirt=0;
inode->i_pipe=0;
return;
}
// 没有dev说明不是硬盘文件对应的inode,不需要回写硬盘,引用数减一即可
if (!inode->i_dev) {
inode->i_count--;
return;
}
if (S_ISBLK(inode->i_mode)) {
// 块文件,inode->i_zone[0]保存的是设备号,把buffer中属于该dev设备的回写到硬盘
sync_dev(inode->i_zone[0]);
wait_on_inode(inode);
}
repeat:
// 还有进程引用该inode节点,引用数减一后返回
if (inode->i_count>1) {
inode->i_count--;
return;
}
// 该inode没有进程引用了,inode对应的文件也没有被其他目录项引用了,删除该inode的内容,并释放该inode
if (!inode->i_nlinks) {
truncate(inode);
free_inode(inode);
return;
}
// 需要回写硬盘,则回写
if (inode->i_dirt) {
write_inode(inode); /* we can sleep - so do again */
wait_on_inode(inode);
goto repeat;
}
inode->i_count--;
return;
}
看完上述内容,你们对linux系统中怎么调用sys_close有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
进程
文件
硬盘
结构
内容
指向
管道
系统
指针
标记
节点
设备
元素
函数
大小
数组
更多
目录
知识
篇文章
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
中班国家网络安全教案
智能软件开发共同合作
数据库软件生成实体
数据库连接池配置的重要性
安卓软件开发用java吗
软件开发实习月报
流放之路破釜一击数据库
如何查询sql数据库ip
BT连不上Excel数据库
山东云空间设计有限公司云服务器
中星网络安全培训
网络安全提高自我防范意识
关系型数据库的三大特性
内黄软件开发报价
网络安全大赛英文名叫什么
泾县进口软件开发服务价钱
运用软件开发
php随机读取数据库记录
泰拉瑞亚如何制造一个服务器
服务器内存没有时序吗
中班国家网络安全教案
我国的网络安全协会
5g技术与网络安全
BT连不上Excel数据库
长沙视频直播软件开发
数据库为什么两阶段锁
天津市网络安全改革
汉中滴驾互联网科技
腾讯计算机服务器在哪里
如何衡量it软件开发量