Linux系统编程之目录操作

概述

        在Linux系统中,文件系统是组织和管理数据的关键组件,而目录则是文件系统的骨架。目录本质上是一个特殊的文件,包含了指向其他文件或目录的链接。每个目录都有一个唯一的inode号,用来标识它在文件系统中的位置。目录可以包含普通文件、其他目录(子目录)、符号链接、其他类型的文件(比如:设备文件等)。

创建目录

        创建目录是一项基本任务,可以通过mkdir函数来实现。其函数原型如下。

int mkdir(const char *path, mode_t mode);

        path:指向要创建的目录路径名的指针,可以是绝对路径(从根路径“/”开始),也可以是相对路径(相对于当前工作目录)。

        mode:目录的权限模式,可使用符号常量S_IRUSR、S_IWUSR、S_IXUSR等来指定。通常情况下,我们会直接写成八进制数。比如:0755表示所有者有读、写、执行权限,而组用户和其他人只有读和执行权限。

        返回值:成功时返回0,失败时返回-1,并设置errno来指示具体的错误类型。

        在下面的示例代码中,我们在当前目录下创建了一个名为“hope_wisdom”的子目录,并设置了适当的权限。

#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>

int main()
{
    const char* pszDirPath = "./hope_wisdom";
    // 设置新目录的权限为:rwxr-xr-x
    mode_t permissions = 0755;
    if (mkdir(pszDirPath, permissions) == -1)
    {
        printf("Dir created failed: %s\n", strerror(errno));
    }
    else
    {
        printf("Dir created successfully\n");
    }
    
    return 0;
}

删除空目录

        当需要删除一个空目录时,可以使用rmdir函数。需要特别注意的是:该函数只能删除空目录,如果目录中有文件或子目录,则会失败。其函数原型如下。

int rmdir(const char *pathname);

        pathname:指向要删除的空目录路径名的指针,可以是绝对路径(从根路径“/”开始),也可以是相对路径(相对于当前工作目录)。

        返回值:成功时返回0,失败时返回-1,并设置errno来指示具体的错误类型。

        在下面的示例代码中,我们尝试在当前目录下删除一个名为“hope_wisdom”的子目录。

#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>

int main()
{
    const char* pszDirPath = "./hope_wisdom";
    if (rmdir(pszDirPath) == -1)
    {
        printf("Dir removed failed: %s\n", strerror(errno));
    }
    else
    {
        printf("Dir removed successfully\n");
    }
    
    return 0;
}

获取/改变当前工作目录

        getcwd函数用于获取当前的工作目录,这对于记录程序运行的位置或恢复之前的工作目录非常有用。有时候,我们可能需要改变程序的工作目录(比如:切换到某个特定的路径下执行命令),这时就可以使用chdir函数。这两个函数的原型如下。

char *getcwd(char *buf, size_t size);

int chdir(const char *path);

        getcwd函数各个参数和返回值的含义如下。

        buf:一个指向缓冲区的指针,用于存放返回的绝对路径。如果这个参数为NULL,则getcwd会分配足够的内存来存储路径,并返回指向这块内存的指针(此时,需要调用者负责释放)。

        size:缓冲区的大小。如果buf是NULL,该参数将被忽略。

        返回值:成功时返回buf,即包含当前工作目录绝对路径的指针。失败时返回NULL,并设置errno来指示具体的错误类型。

        chdir函数各个参数和返回值的含义如下。

        path:指向新工作目录路径名的指针,可以是绝对路径或相对路径。

        返回值:成功时返回0,失败时返回-1,并设置errno来指示具体的错误类型。

        在下面的示例代码中,我们先通过getcwd函数获取了当前工作目录,然后通过chdir函数修改了当前工作目录为“hope_wisdom”。

#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <limits.h>

int main()
{
    char pszDir[PATH_MAX];
    if (getcwd(pszDir, sizeof(pszDir)) != NULL)
    {
        printf("Current working directory: %s\n", pszDir);
    }
    else
    {
        printf("getcwd failed\n");
    }
    
    if (chdir("./hope_wisdom") == -1)
    {
        printf("chdir failed: %s\n", strerror(errno));
    }
    else
    {
        printf("chdir OK\n");
    }

    return 0;
}

        注意:使用chdir函数改变工作目录后,所有相对路径的文件访问都将基于新的工作目录。另外,如果程序以多线程方式运行,需要注意多个线程共享相同的当前工作目录的情况。这是因为,此时可能会导致不可预测的行为。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Websocket客户端从Openai Realtime api Sever只收到部分数据问题分析

目录 背景 分析 解决方案 背景 正常情况下&#xff0c;会从Openai Realtime api Sever收到正常的json数据,但是当返回音频数据时&#xff0c;总会返回非json数据。这是什么问题呢&#xff1f; 分析 期望的完整响应数据如下&#xff1a; {"session": {"inp…

flask后端开发(1):第一个Flask项目

目录 一、Helloworddebug、host、port的配置 一、Helloword 一般是会创建两个文件夹和app.py app.py from flask import FlaskappFlask(__name__)app.route(/) def hello_world():return Hello World!if __name__ __main__:app.run()右键运行这个py文件&#xff0c;消息绑定…

OAuth 2.0

简介 OAuth 是一种开放标准的授权协议或框架&#xff0c;它提供了一种安全的方式&#xff0c;使第三方应用程序能够访问用户在其他服务上的受保护资源&#xff0c;而无需共享用户的凭证&#xff08;如用户名和密码&#xff09;。OAuth 的核心思想是通过“授权令牌”来代替直接…

玩原神学编程-原神时钟

前言 最近喜欢玩原神这种开放世界探索的游戏&#xff08;还有黑神话、古墓丽影等&#xff09;&#xff0c;只能说纳塔版本的boss盾真的厚&#xff0c;萌新的我去打boss&#xff0c;从白天打到黑夜&#xff0c;黑夜再打到白天&#xff08;游戏里面的时间&#xff09;。 闲话结…

【Spring】深入解析 Spring 原理:Bean 的多方面剖析(源码阅读)

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【Java】登神长阶 史诗般的Java成神之路 一、Bean的作用域 在 Java Spring 框架中&#xff0c;Bean 的作用域是一个关键概念&#xff0c;它决定了 Bean 的生命周期和实例化方式&#xff0c;对应用的性…

基于高德地图js api实现掩膜效果 中间矢量 周围卫星图

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>管网服务</title><style>html,body,#ma…

Vue.js组件(6):echarts组件

1 前言 本章主要对常用的echars图表展示进行基本的组件封装。使用该组件前需要在项目中引入echarts。官网&#xff1a;Apache ECharts npm install echarts --save 2 图表组件 2.1 折线图组件 组件属性&#xff1a;chartId&#xff0c;指定图表挂载div的id&#xff0c;注意不…

RCE常见姿势

文章目录 常见漏洞执行函数&#xff1a;1.系统命令执行函数2.代码执行函数 命令拼接符读取文件命令绕过&#xff1a;空格过滤绕过关键字绕过长度过滤绕过无参数命令执行绕过无字母数字绕过利用%0A截断利用回溯绕过利用create_function()代码注入无回显RCE1.反弹shell2.dnslog外…

selenium执行js

JS知识 获取元素 document.getElement 移除属性&#xff1a;removeAttribute("xx") 窗口移动&#xff1a;window.scrollTo(0, document.body.scrollHeight)方法 drivier.execute_script(js)场景&#xff1a; 日期选择框&#xff0c;不能输入&#xff0c;只能设置…

三维场景重建与3D高斯点渲染技术探讨

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年12月25日10点11分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 文章源地址(有视频)&#xff1a;链接h…

springboot启动不了 因一个spring-boot-starter-web底下的tomcat-embed-core依赖丢失

这个包丢失了 启动不了 起因是pom中加入了 <tomcat.version></tomcat.version>版本指定&#xff0c;然后idea自动编译后&#xff0c;包丢了&#xff0c;删除这个配置后再也找不回来&#xff0c; 这个包正常在 <dependency><groupId>org.springframe…

Java日志框架:log4j、log4j2、logback

文章目录 配置文件相关1. properties测试 2. XMl使用Dom4j解析XML Log4j与Log4j2日志门面 一、Log4j1.1 Logges1.2 Appenders1.3 Layouts1.4 使用1.5 配置文件详解1.5.1 配置根目录1.5.2 配置日志信息输出目的地Appender1.5.3 输出格式设置 二、Log4j22.1 XML配置文件解析2.2 使…

基于LSTM长短期记忆神经网络的多分类预测【MATLAB】

在深度学习中&#xff0c;长短期记忆网络&#xff08;LSTM, Long Short-Term Memory&#xff09;是一种强大的循环神经网络&#xff08;RNN&#xff09;变体&#xff0c;专门为解决序列数据中的长距离依赖问题而设计。LSTM因其强大的记忆能力&#xff0c;广泛应用于自然语言处理…

机器学习基础 衡量模型性能指标

目录 1 前言 ​编辑1.1 错误率(Error rate)&精度(Accuracy)&误差(Error)&#xff1a; 1.2 过拟合(overfitting): 训练误差小&#xff0c;测试误差大 1.3 欠拟合(underfitting)&#xff1a;训练误差大&#xff0c;测试误差大 1.4 MSE: 1.5 RMSE: 1.6 MAE: 1.7 R-S…

TCP的流量控制的实现

滑动窗口的介绍 滑动窗口是tcp协议中的一个重要概念&#xff0c;滑动窗口是字节为单位&#xff0c;而tcp头部的序列化和确认号也是以字节为单位的&#xff0c;滑动窗口里是含有可以传输的字节的数量&#xff08;可以传输不是已经传输&#xff09;&#xff0c;而滑动窗口的大小是…

【0x001D】HCI_Read_Remote_Version_Information命令详解

目录 一、命令概述 二、命令格式及参数说明 2.12. HCI_Read_Remote_Version_Information 命令格式 2.2. Connection_Handle 三、生成事件 3.1. HCI_Command_Status 事件 3.2. HCI_Read_Remote_Version_Information_Complete 事件 四、命令执行流程 4.1. 命令发起阶段(…

一篇文章学会HTML

目录 页面结构 网页基本标签 图像标签 超链接标签 文本链接 图像链接 锚链接 功能链接 列表 有序列表 无序列表 自定义列表 表格 跨列/跨行 表头 媒体元素 视频 音频 网站的嵌套 表单 表单元素 文本框 单选框 多选框 按钮 下拉框 文本域和文件域 表…

C语言项目 天天酷跑(上篇)

前言 这里讲述这个天天酷跑是怎么实现的&#xff0c;我会在天天酷跑的下篇添加源代码&#xff0c;这里会讲述天天酷跑这个项目是如何实现的每一个思路&#xff0c;都是作者自己学习于别人的代码而创作的项目和思路&#xff0c;这个代码和网上有些许不一样&#xff0c;因为掺杂了…

如何完全剔除对Eureka的依赖,报错Cannot execute request on any known server

【现象】 程序运行报错如下&#xff1a; com.netflix.discovery.shared.transport.TransportException报错Cannot execute request on any known server 【解决方案】 &#xff08;1&#xff09;在Maven工程中的pom去掉Eureka相关的引用&#xff08;注释以下部分&#xff0…

华为云国内版与国际版的主要区别解析

华为云作为全球领先的云计算服务提供商&#xff0c;提供了国内版和国际版两种服务。虽然它们都旨在为用户提供高效、可靠的云计算解决方案&#xff0c;但在功能、服务、合规性等方面存在一些显著的区别。我们九河云通过本文将详细分析华为云国内版与国际版的主要区别&#xff0…