微视linux 文件系统之打开文件返回只读

2023-12-05 19:08

本文主要是介绍微视linux 文件系统之打开文件返回只读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

struct file *do_last(struct nameidata *nd, struct path *path,int open_flag, int acc_mode,int mode, const char *pathname)
{if (!(open_flag & O_CREAT)) {error = do_lookup(nd, &nd->last, path);if (error)goto exit;error = -ENOENT;//不让以创建方式打开,那么如果找不到则返回if (!path->dentry->d_inode)goto exit_dput;goto ok;}/* Negative dentry, just create the file */if (!path->dentry->d_inode) {error = mnt_want_write(nd->path.mnt);=>int mnt_want_write(struct vfsmount *mnt){if (__mnt_is_readonly(mnt)) {dec_mnt_writers(mnt);ret = -EROFS;//打开失败,由于是只读模式goto out;}out:return ret;}if (error)goto exit_mutex_unlock;}
ok:filp = finish_open(nd, open_flag, acc_mode);=>struct file *finish_open(struct nameidata *nd,int open_flag, int acc_mode){error = may_open(&nd->path, acc_mode, open_flag);=>int may_open(struct path *path, int acc_mode, int flag){error = inode_permission(inode, acc_mode);=>int inode_permission(struct inode *inode, int mask){if (mask & MAY_WRITE) {//写模式下权限的判断umode_t mode = inode->i_mode;/** Nobody gets write access to a read-only fs.*/if (IS_RDONLY(inode) &&(S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)))return -EROFS;//只读/** Nobody gets write access to an immutable file.*/if (IS_IMMUTABLE(inode))return -EACCES;}}if (error)return error;}if (error) {if (will_truncate)mnt_drop_write(nd->path.mnt);goto exit;}}return filp;exit_mutex_unlock:mutex_unlock(&dir->d_inode->i_mutex);
exit_dput:path_put_conditional(path, nd);
exit:if (!IS_ERR(nd->intent.open.file))release_open_intent(nd);path_put(&nd->path);return ERR_PTR(error);	
}

 

这篇关于微视linux 文件系统之打开文件返回只读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/458763

相关文章

前端下载文件时如何后端返回的文件流一些常见方法

《前端下载文件时如何后端返回的文件流一些常见方法》:本文主要介绍前端下载文件时如何后端返回的文件流一些常见方法,包括使用Blob和URL.createObjectURL创建下载链接,以及处理带有C... 目录1. 使用 Blob 和 URL.createObjectURL 创建下载链接例子:使用 Blob

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa