当前位置: 首页 > news >正文

open与openat的区别

Linux 中的 open 和 openat 系统调用都用于打开文件,但它们有一些区别。

一、函数原型

open 系统调用的原型

#include <fcntl.h>int open(const char *pathname, int flags, mode_t mode);
  • pathname 是要打开的文件路径
  • flags 是打开文件的标志
  • mode 是文件的权限。
    open 系统调用会在文件系统中查找 pathname 指定的文件,并返回一个文件描述符,用于后续的读写操作。

openat 系统调用的原型

#include <fcntl.h>int openat(int dirfd, const char *pathname, int flags, mode_t mode);
  • dirfd 是一个文件描述符
  • pathname 是相对于 dirfd 的路径
  • flags 和 mode 的含义与 open 系统调用相同。
    openat 系统调用会在 dirfd 指定的目录下查找 pathname 指定的文件,并返回一个文件描述符。

二、openat使用场景

openat 系统调用相对于 open 系统调用的优势在于,它可以避免一些安全问题。在多线程或多进程环境中,使用 open 系统调用打开文件时,可能会存在竞态条件,导致打开的文件不是预期的文件。而使用 openat 系统调用,可以避免这个问题,因为它是基于一个已经打开的目录文件描述符进行查找的,不需要再次查找文件路径。

此外,openat 系统调用还可以用于打开相对于某个符号链接的路径的文件,而 open 系统调用则不能。

https://www.cnblogs.com/BinBinStory/p/7400993.html

引入openat是方便一个进程内的各线程可拥有不同的当前目录,使用chdir会影响整个进程,而使用openat只需要每个线程在初始化时打开一个目录获得dirfd(调用open),然后就可以openat在“当前目录”操作文件了,如下伪代码所示:

int dirfd = open("/tmp"); // 相当于chdir到“/tmp”
int filefd = openat(dirfd, "myfile"); // 在/tmp目录下打开“myfile”文件 。

At means that the working directory considered for the open call is at the given file descriptor, passed as the parameter. The *at() family of functions are useful so that all path relative operations refer to the same file inode, even if it changes name or someone replaces it.

个人觉得这句话靠谱,at一直以相对路径来读取文件信息,相对于绝对路劲,当文件换了一个路径时:

  • 程序中需要读写该路径下的多个文件,如果使用open实现,那么需要修改程序中所有open文件的绝对路径。
  • 使用openat,只需要修改传入参数dirfd即可,也就是修改文件夹路径。

相关文章:

open与openat的区别

Linux 中的 open 和 openat 系统调用都用于打开文件&#xff0c;但它们有一些区别。 一、函数原型 open 系统调用的原型 #include <fcntl.h>int open(const char *pathname, int flags, mode_t mode);pathname 是要打开的文件路径flags 是打开文件的标志mode 是文件的…...

人工智能与供应链行业融合:预测算法的通用化与实战化

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 让我们一起深入探索人工智能与供应链的融合&#xff0c;以及预测算法在实际应用中的价值&#xff01;&#x1f50d;&#x1f680; 文章目录 前言供应链预测算法的基本流程统计学习模型与机…...

Cytoscape学习教程

写在前面 今天分享的内容是自己遇到问题后,咨询社群里面的同学,帮忙解决的总结。 关于Cytoscape,对于做组学或生物信息学的同学基本是陌生的,可能有的同学用这个软件作图是非常溜的,做出来的网络图也是十分的好看,“可玩性”很高,就像前面分享的aPEAR包一样aPEAR包绘制…...

computed和watch相关

Computed本质是一个具备缓存的watcher&#xff0c;依赖的属性发生变化就会更新视图。 适用于计算比较消耗性能的计算场景。当表达式过于复杂时&#xff0c;在模板中放入过多逻辑会让模板难以维护&#xff0c;可以将复杂的逻辑放入计算属性中处理 computed擅长处理&#xff1a;一…...

反思一次效能提升

前天与一个大佬交流。想起自己在6年多前在团队里做的一次小小的效能提升。 改进前 在同一个产品团队&#xff0c;同时有前端工程师和后端工程师。他们经常需要共同协作完成features。 前端是一个传统的多页应用。前端渲染是由后端的velocity模板引擎实现的。 打包后&#xff0c…...

ElasticSearch之cat indices API

命令样例如下&#xff1a; curl -X GET "https://localhost:9200/_cat/indices?vtrue&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"执行结果输出如下&#xff1a; health status index uuid …...

Composer update 跳过指定依赖

在使用Compose进PHP 依赖管理只时&#xff0c;有时候我们可能希望忽略版本批配&#xff0c;即使依赖项的景新版本已经发布&#xff0c;也然续使用当前的乐本。这种情况下&#xff0c;我们可以使用Composer的 --ignore-platform-reqs 选项来实现 可以使用--ignore-platform-req…...

@RequestMapping详解:请求映射规则

目录 请求-相应模式&#xff1a; 设置请求映射规则RequestMapping POST 请求&#xff1a; GET 请求 请求-相应模式&#xff1a; 前端作为客户端向后端发送请求&#xff08;请求可以分为请求头和请求体两部分&#xff0c;请求头包含了一些元数据信息&#xff0c;如请求方式、…...

C#中密封类和密封方法

目录 一、定义与特性 1.何时使用密封类 2.定义 3.特性 二、示例 如果所有的类都可以被继承&#xff0c;很容易导致类的层次结构变得十分复杂。使对类的理解和使用变得十分困难。为了避免滥用继承&#xff0c;C#中提出了密封类的概念。 一、定义与特性 密封类可以用来限制…...

Pytorch中的Net.train()和 Net.eval()函数讲解

目录 前言1. Net.train()2. Net.eval()3. 总结 前言 这两个方法通常用于训练和测试阶段 1. Net.train() 该代码用在训练模式中 主要作用&#xff1a; 模型启用了训练时特定的功能&#xff08;Batch Normalization 和 Dropout&#xff09;。 在这种模式下&#xff0c;模型会根…...

氪了几百亿,字节游戏停止了“跳动”

目录 一、氪了几百亿&#xff0c;字节游戏停止了“跳动” 二微软推出跨平台框架 ML.NET 3.0 版&#xff1a;强化深度学习、加强AI效率 一、氪了几百亿&#xff0c;字节游戏停止了“跳动” 朝夕光年&#xff0c;扑了 11月26日&#xff0c;脉脉社区的一个截图内容引起大众热议…...

进入docker容器

学习如何进入一个正在运行的容器的内部&#xff0c;要求学习者参照示例&#xff0c;进入一个名为container2的容器内部&#xff0c;并在容器内部创建一个1.txt文件。 相关知识 使容器在后台运行 因为本关要使用docker run -d命令&#xff0c;所以在本关的开始&#xff0c;将…...

C陷阱与缺陷——第5章库函数

1. 返回整数的getchar函数 #include <stdio.h>main() {char c;while((c getchar()) ! EOF){putchar(c);} } 上述函数是错误的&#xff0c;原因在于程序中的变量c被声明为char类型&#xff0c;而不是int类型&#xff0c;这意味着c无法容下所有可能的字符&#xff0c;特…...

【C++上层应用】6. 信号 / 中断

文章目录 【 1. signal 函数 】【 2. raise函数 】 信号是由操作系统传给进程的 中断&#xff0c;会提早终止一个程序。在 UNIX、LINUX、Mac OS X 或 Windows 系统上&#xff0c;可以通过按 CtrlC 产生中断。有些信号不能被程序捕获&#xff0c;但是下表所列信号可以在程序中捕…...

树与二叉树堆:堆的意义

目录 堆的意义&#xff1a; 第一是堆的排序&#xff0c;第二是堆的top k 排行问题 堆的 top k 排行问题&#xff1a; 面对大量数据的top k 问题&#xff1a; 堆排序的实现&#xff1a;——以升序为例 方法一 交换首尾&#xff1a; 建立大堆&#xff1a; 根结点尾结点的…...

什么时候适合做ui自动化测试?什么时候做接口自动化测试

UI自动化测试和接口自动化测试都是软件测试中非常重要的部分&#xff0c;它们各自有适合的应用场景。 适合做UI自动化测试的场景包括&#xff1a; 用户界面&#xff08;UI&#xff09;变化频繁的应用程序。需要测试用户交互和流程的应用程序。需要验证页面布局、样式和交互的…...

[ABC261E] Many Operations(dp,位运算,打表)

[ABC261E] Many Operations - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) Problem Statement We have a variable X and N kinds of operations that change the value of X. Operation i is represented as a pair of integers (Ti​,Ai​), and is the following operati…...

一、爬虫-爬取豆瓣电影案例

1、环境配置 你需要一个pycharm和requests第三方库&#xff0c;在安装完成之后即可继续浏览。 2、操作流程 &#xff08;1&#xff09;打开豆瓣电影网站&#xff0c;点击排行榜&#xff0c;点击喜剧&#xff0c;检查 &#xff08;2&#xff09;可以看到鼠标每次下移&#xff0…...

4G5G防爆执法记录仪、防爆智能安全帽赋能智慧燃气,可视化巡检巡线,安全生产管控

随着燃气使用的普及&#xff0c;燃气安全问题日益突出。传统应急安全问题处理方式暴露出以下问题&#xff1a; 应急预案不完善&#xff1a;目前一些燃气企业的应急预案存在实用性不高、流程不清晰等问题&#xff0c;导致在紧急情况下难以迅速启动和有效执行。 部门协同不流畅…...

武汉数字孪生赋能工业制造,加速推进制造业数字化转型

随着数字孪生技术的不断推进&#xff0c;互联网、物联网、智能传感技术开始应用到数控机床的远程服务&#xff0c;状态监控&#xff0c;故障诊断&#xff0c;维护管理等方面。武汉数字孪生是在虚拟空间中创建物理对象的高保真虚拟模型&#xff0c;以模拟其在现实世界中的行为提…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

Spring Security 认证流程——补充

一、认证流程概述 Spring Security 的认证流程基于 过滤器链&#xff08;Filter Chain&#xff09;&#xff0c;核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤&#xff1a; 用户提交登录请求拦…...

yaml读取写入常见错误 (‘cannot represent an object‘, 117)

错误一&#xff1a;yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因&#xff0c;后面把yaml.safe_dump直接替换成yaml.dump&#xff0c;确实能保存&#xff0c;但出现乱码&#xff1a; 放弃yaml.dump&#xff0c;又切…...

GB/T 43887-2024 核级柔性石墨板材检测

核级柔性石墨板材是指以可膨胀石墨为原料、未经改性和增强、用于核工业的核级柔性石墨板材。 GB/T 43887-2024核级柔性石墨板材检测检测指标&#xff1a; 测试项目 测试标准 外观 GB/T 43887 尺寸偏差 GB/T 43887 化学成分 GB/T 43887 密度偏差 GB/T 43887 拉伸强度…...