linux系统中怎么调用sys_close
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,今天就跟大家聊聊有关linux系统中怎么调用sys_close,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1 根据文件描述符,把指针数组对应
千家信息网最后更新 2026年11月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安全错误
数据库的锁怎样保障安全
精品咖啡豆
中关村互联网 科技集团
互联网科技金融公司
互联网科技股票
互联网巨头投资的硬核科技
顶级互联网科技成果有哪些
互联网科技项目计划书材料类
湖北码尼互联网科技有限公司电话
米聚互联网科技南京有限公司排面
深圳市罗太互联网科技有限公司
上海科技产业互联网平台
智帮互联网科技公司最近动向
下一代互联网重大应用科技园
互联网科技包装股份有限公司上市
郑州欣桑互联网科技有限公司
云南互联网科技学费
互联网科技博主张洲
青岛易易互联网科技
重庆科技产业互联网有哪些
科技互联网企业在行动
上海挚品互联网科技有限公司
深圳齐家互联网科技
互联网 科技服务平台
互联网金融中的现代科技
互联网科技人工智能实验室
滨湖区互联网智能科技产品有哪些
富国互联网金融科技混合基金
互联网与数字科技关系
互联网风格科技公司名称
江苏互联网智能科技产品出厂价