Linux--目录与文件操作函数

news2024/11/15 17:42:19

一、目录和(硬)链接

  1. 可在 shell 中利用 ln 命令为一个业已存在的文件创建新的硬链接

添加图片注释,不超过 140 字(可选)

2. 同一文件的所有名字(链接)地位平等—没有一个名字(比如,第一个)会优于其他名字。

3. 对硬链接的限制有二,均可用符号链接来加以规避。

  • 因为目录条目(硬链接)对文件的指代采用了 i-node 编号,而 i-node 编号的唯一性仅 在一个文件系统之内才能得到保障,所以硬链接必须与其指代的文件驻留在同一文 件系统中。

  • 不能为目录创建硬链接,从而避免出现令诸多系统程序陷于混乱的链接环路。

二、符号(软)链接

  1. 符号链接,有时也称为软链接,是一种特殊的文件类型,其数据是另一文件的名称。

2. 在 shell 中,符号链接是由 ln–s 命令创建的。ls–F 命令的输出结果中会在符号链接的尾部标记@。

3. 符号链接的地位不如硬链接。尤其是,文件的链接计数中并未将符号链接计算在内。因此,如果移除了符号链接所指向的文件名,符号链接本身还将继续存在,尽管无法再对其进行解引用(下溯)操作,也将此类链 接称之为悬空链接。更有甚者,还可以为并不存在的文件名创建一个符号链接。

三、系统调用对符号链接的解释

  1. 许多系统调用都会对符号链接进行解引用处理(即下溯 follow),从而对链接所指向的 文件展开操作。还有一些系统调用对符号链接则不作处理,直接操作于链接文件本身。

2. 符号链接的文件权限和所有权

  • 大部分操作会无视符号链接的所有权和权限(创建符号链接时会为其赋予所有权限)。 是否允许操作反而是由符号链接所指代文件的所有权和权限来决定。仅当在带有粘性权限 位(15.4.5 节)的目录中对符号链接进行移除或改名操作时,才会考虑符号链接自身的所 有权。

四、创建和移除(硬)链接:link()和 unlink()

  1. link() 系统调用创建硬链接

#include <unistd.h> 
int link(const char *oldpath, const char *newpath);
  • 若 oldpath 中提供的是一个已存在文件的路径名,则系统调用 link()将以 newpath 参数所指 定的路径名创建一个新链接。若 newpath 指定的路径名已然存在,则不会将其覆盖;相反,将 产生一个错误(EEXIST)。

  • 在 Linux 中,link()系统调用不会对符号链接进行解引用操作。若 oldpath 属于符号链接, 则会将 newpath 创建为指向相同符号链接文件的全新硬链接。(换言之,newpath 也是符号链 接,指向 oldpath 所指代的同一文件。)

2. unlink()系统调用移除硬链接

#include <unistd.h> 
int unlink(const char *pathname);
  • unlink()系统调用移除一个链接(删除一个文件名),且如果此链接是指向文件的最后一个 链接,那么还将移除文件本身。

  • 若 pathname 中指定的链接不存在,则 unlink()调用失败,并将 errno 置为 ENOENT。

  • unlink()系统调用不会对符号链接进行解引用操作,若 pathname 为符号链接,则移除链接 本身,而非链接指向的名称。

3. 仅当关闭所有文件描述符时,方可删除一个已打开的文件

4. 当移除指向文件的最后一个链接时,如果仍有进程持有指代该文件的打开文件描述符,那么 在关闭所有此类描述符之前,系统实际上将不会删除该文件。这一特性的妙用在于允许取消 对文件的链接,而无需担心是否有其他进程已将其打开。

五、更改文件名:rename()

  1. 借助于 rename()系统调用,既可以重命名文件,又可以将文件移至同一文件系统中的另一 目录。

#include <stdio.h> //将现有的一个路径名 oldpath 重命名为 newpath 参数所指定的路径名。 
int rename(const char *oldpath, const char *newpath);
  • rename()调用仅操作目录条目,而不移动文件数据。改名既不影响指向该文件的其他硬链 接,也不影响持有该文件打开描述符的任何进程,因为这些文件描述符指向的是打开文件描 述,(在调用 open()之后)与文件名并无瓜葛。

  • 以下规则适用与对 rename()的调用

  • newpath 已经存在,则将其覆盖。

  • 若 newpath 与 oldpath 指向同一文件,则不发生变化(且调用成功)。

六、使用符号链接:symlink()和 readlink()

  1. symlink()系统调用会针对由 target 所指定的路径名创建一个新的符号链接—linkpath。 (想移除符号链接,需使用 unlink()调用。)

#include <unistd.h> 
int symlink(const char *target, const char *linkpath);
  • 若 linkpath 中给定的路径名已然存在,则调用失败(且将 errno 置为 EEXIST)。由 filepath 指 定的路径名可以是绝对路径,也可以是相对路径。

2. 获取链接本身的内容,即其所指向的路径名

#include <unistd.h> 
ssize_t readlink(const char *pathname, char *buf, size_t bufsiz);

七、创建和移除目录:mkdir()和 rmdir()

  1. mkdir()系统调用创建一个新目录。

#include <sys/stat.h> 
#include <sys/types.h> 
int mkdir(const char *pathname, mode_t mode);
  • mkdir()系统调用所创建的仅仅是路径名中的最后一部分。换言之,mkdir("aaa/bbb/ccc",mode) 仅当目录 aaa 和 aaa/bbb 已经存在的情况下才会成功。

2. rmdir()系统调用移除由 pathname 指定的目录,该目录可以是绝对路径名,也可以是相对 路径名。

#include <unistd.h> 
int rmdir(const char *pathname);

八、移除一个文件或目录:remove()

  1. remove()库函数移除一个文件或一个空目录

#include <stdio.h> 
int remove(const char *pathname);
  • 如果 pathname 是一文件,那么 remove()去调用 unlink();如果 pathname 为一目录,那么 remove()去调用 rmdir()。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2109988.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计应8-01-作业1-静态网页

IP C:\Users\WL>ipconfig // win 查看 ip Windows IP 配置以太网适配器 以太网: //连接特定的 DNS 后缀 . . . . . . . :本地链接 IPv6 地址. . . . . . . . : fe80::6c95:9da6:140c:c59e%13IPv4 地址 . . . . . . . . . . . . : 192.168.51.243//子网掩码 . . . .…

mysql阿拉伯数字转换中文数字函数

函数如下 1.中间一部分代码可以提取出来作为公共方法&#xff0c;我这里并没有提取&#xff0c;因为我是在代码中动态添加的 2.样式目前只做了&#xff1a;123转为一百二十三这类的 drop function if EXISTS zz_convert_number_chinese; create FUNCTION zz_convert_number_…

ELK系列之四---如何通过Filebeat和Logstash优化K8S集群的日志收集和展示

前 言 上一篇文章《日志不再乱: 如何使用Logstash进行高效日志收集与存储》介绍了使用ELK收集通用应用的日志&#xff0c;在目前大多应用都已运行在K8S集群上的环境&#xff0c;需要考虑怎么收集K8S上的日志&#xff0c;本篇就介绍一下如何使用现有的ELK平台收集K8S集群上POD的…

新型供应链攻击手法 — “Revival Hijack”

JFrog 的网络安全研究人员发现了一种名为“Revival Hijack”的新型 PyPI 攻击技术&#xff0c;该技术利用包删除策略绕过安全检查。据统计&#xff0c;超过 22,000 个程序包处于风险之中&#xff0c;可能会影响数十万名用户。 JFrog 的网络安全研究人员发现了一种用于攻击 Pyth…

易灵思时钟输出问题记录

在添加 GPIO时&#xff0c;设置Mode为clkout,并在output Clock中输入时钟名。 这里需要 注意的是&#xff0c; 1. 时钟名不能从core直接输出&#xff0c;而只能使用interface中使用的时钟&#xff0c;如PLL输出的时钟或者GCLK输入的时钟。 2. 易灵思输出时钟不能做其他用途&a…

2024中国产业园区运营商50强榜单揭晓:行业洗牌加速,数智化是关键!

近日&#xff0c;备受瞩目的“2024年度中国产业园区运营商50强”榜单正式揭晓&#xff0c;不仅照亮了行业内的领军之星&#xff0c;更为我们揭示了产业园区运营管理平台在推动经济转型升级中的关键力量与未来趋势的璀璨图景。 从以上产业园区运营商 50 强的角度来看&#xff0…

30岁程序员的焦虑:转行还是继续死磕?现在什么方向更有前景?

最适合转入AI大模型的莫过于程序员和在读大学生了吧。 对于程序员来说&#xff0c;码农之路并不是一帆风顺。对于每一个入行IT业的社会青年来说&#xff0c;谁不是抱着想要成为最高峰的技术大咖或者跃进管理岗的小目标&#xff1f; 然而往往更多的人并非互联网吹捧的如此耀眼…

云原生技术:‌引领数字化转型的新浪潮

云原生技术&#xff1a;‌引领数字化转型的新浪潮 在数字化转型的时代背景下&#xff0c;‌企业面临着前所未有的挑战与机遇。‌随着云计算技术的飞速发展&#xff0c;‌云原生技术作为一种新型的应用程序开发和部署方式&#xff0c;‌正逐步成为构建高可用、‌可扩展应用程序…

MySQL复习1

基本概念 OLTP OLTP&#xff08;On-Line transaction processing&#xff09;翻译为联机事物处理&#xff1b;主要对数据库增删改查。 OLTP 主要用来记录某类业务事件的发生&#xff1b;数据会以增删改查的方式在数据库中更新处理操作&#xff0c;要求实施性强&#xff0c;稳…

OS_程序的装入与链接

2024.09.05&#xff1a;操作系统程序的装入与链接学习笔记 第12节 程序的装入与链接 2.1 程序的装入2.1.1 绝对装入方式2.1.2 可重定位装入方式&#xff08;静态重定位&#xff09;2.1.3 动态运行时装入方式&#xff08;动态重定位&#xff09; 2.2 程序的链接2.2.1 静态链接方…

LIN总线CAPL函数—— 检查LIN报头的时间(ChkStart_LINHeaderToleranceViolation

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

高级算法设计与分析 学习笔记3 哈希表

首先我们要讨论一个把n个数据放到列表S里面的问题&#xff1a; 但很显然&#xff0c;这些数据的范围有多大这个T就得有多大&#xff0c;而实际上要放的数字可能就几个&#xff08;比如就放一个1和一个10000000&#xff0c;那我还是要准备一个巨大的T&#xff09;&#xff0c;不…

【STM32】cubemx配置GPIO

直接使用STM32CubeMX点灯 使用之前的工程 配置GPIO 对四个灯设置GPIO输出 close后直接打开keil 演示

基于LangChain+LLM的相关技术研究及初步实践

0 1 概述 大模型概述 大模型是指具有大规模参数和复杂计算结构的机器学习模型。这些模型通常由深度神经网络构建而成&#xff0c;拥有数十亿甚至数千亿个参数。大模型的设计目的是为了提高模型的表达能力和预测性能&#xff0c;能够处理更加复杂的任务和数据。大模型在各种领…

提高 Facebook 参与度的 8个技巧

在社交媒体中&#xff0c;Facebook仍然是企业与受众建立联系的重要渠道。无论你是刚刚建立 Facebook 业务主页&#xff0c;还是经验丰富的营销人员&#xff0c;都必须了解人们如何跟你的主页互动。 一、什么是 Facebook 参与度&#xff1f; Facebook的参与度是指用户对你的 F…

潜望长焦+快充:vivo X200系列,小尺寸手机的大突破

在智能手机市场日益激烈的竞争中&#xff0c;厂商们不断推陈出新&#xff0c;以满足消费者多样化的需求。vivo作为中国知名的智能手机品牌&#xff0c;一直以其创新的设计和强大的功能赢得市场的认可。 近日&#xff0c;vivo X200系列的即将发布引起了广泛关注&#xff0c;特别…

开学季装机必备软件 向日葵远程控制,手机也能变电脑

暑假转眼结束&#xff0c;又来到了9月开学季。 这个时间点&#xff0c;不少同学会选择为自己购置一台电脑&#xff0c;放置在宿舍使用。 一台全新的PC电脑该安装哪些软件呢&#xff1f;基本的办公全家桶不用多说&#xff0c;steam、epic等游戏娱乐平台更是无需多言。除此之外…

Spring Cloud Gateway学习记录

Spring中文网 https://springdoc.cn/spring-cloud-gateway/ Spring官网 https://spring.io/projects/spring-cloud-gateway 网关简介 大家都都知道在微服务架构中&#xff0c;一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢&#xff1f; 如果…

如何恢复格式化的 Android 智能手机

如何恢复Android手机上格式化的数据 格式化智能手机的存储卡后&#xff0c;您想恢复图片、视频、音乐吗&#xff1f;您想从 Android 手机中恢复已删除的文本吗&#xff1f;格式化存储卡后&#xff0c;如何恢复存储卡上的图片&#xff1f; 使用奇客数据恢复&#xff0c;这款特…

可解释人工智能(XAI)领域的全面概述

AI 模型&#xff0c;尤其是深度学习模型&#xff0c;由于其黑盒性质&#xff0c;在安全关键领域&#xff08;如医疗保健、金融和自动驾驶汽车&#xff09;中面临着重大挑战。用户无法理解模型的内部逻辑和决策过程&#xff0c;这导致了缺乏信任、透明度和问责制。XAI 通过提供模…