linux系统中怎么调用sys_close
发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,今天就跟大家聊聊有关linux系统中怎么调用sys_close,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1 根据文件描述符,把指针数组对应
千家信息网最后更新 2025年02月05日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安全错误
数据库的锁怎样保障安全
oracle连接服务器失败
hp服务器论坛
冬奥会网络安全驻场
网络安全免费虚拟机
网络技术设计公司
收银系统服务器接口连接失败
书法与网络技术有关吗
浅谈安全网络技术
服务器供电模块
代理服务器 ip
数据库能同时执行多少查询
数据库文件同步工具
zabbix支持的数据库
网宿科技与互联网
菏泽移动城管软件开发公司
为什么王者服务器会崩溃
电商会员系统数据库设计
东方通配置数据库连接池
山西大学网络安全考研
南通上启软件开发有限公司
网络安全标语五个字
软件开发面试常见错误是什么
南昌软件开发价格
临沂达尼亚网络技术
乌班图软件开发版本
网络安全证书文案沙雕
网络安全领导内设机构
服务器禁用ping安全吗
2018软件开发职业分析
山东麦克斯网络技术有限公司