Linux环境编程文件路径操作之realpath, dirname, basename

本文介绍了在Qt中如何为顶层窗口及其子窗口设置背景图片和背景颜色的方法,并提供了具体的代码实现。同时,还讨论了不同情况下使用setStyleSheet方法的限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Linux环境开发中,有时我们需要获取文件路径,文件名等信息,比如读取目录下的所有文件,这个目录可能下面还有子目录,以及文件,本篇记录Linux环境编程文件路径操作之realpath, dirname, basename的基本用法。

首先查看帮助文档

1.realpath函数是 Linux 系统中的一个标准库函数,用于将给定的相对路径转换为绝对路径。

函数名realpath
相关函数dirname, basename
表头文件#include <limits.h>
#include <stdlib.h>
函数定义char *realpath(const char *path, char *resolved_path);
函数说明

用于将给定的相对路径转换为绝对路径。该函数会解析所有的符号链接并返回最终的实际路径。

如果resolved_path参数传nullptr,则系统会分配内存返回该路径地址,记得free(returnpath)
返回值成功返回实际路径,失败nullptr

示例:

 

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <error.h>
#include <limits.h>

using namespace std;

int main()
{
    char absolutePath[PATH_MAX]={'\0'};
    char *pRet = realpath("./realpath_test.txt", absolutePath);
    printf("pRet:         %s\n", pRet);
    printf("absolutePath: %s\n", absolutePath);

    char *dynamicPath = realpath("./realpath_test.txt", nullptr);
    if(dynamicPath != nullptr) {
        printf("dynamicPath:  %s\n", dynamicPath);
        free(dynamicPath);
    }
    else {
        perror("Failed to resolve path dynamically");
    }

    cout << "Hello Ubuntu1804!" << endl;
    return 0;
}

运行结果:

2.dirname函数用于从给定的路径字符串中提取目录部分。

函数名dirname
相关函数realpath, basename
表头文件#include <libgen.h>
函数定义char *dirname(char *path);
函数说明

dirname 是 Linux 系统中的一个函数,主要用于从给定的路径字符串中提取目录部分。它会去掉路径的最后一级名称(即文件名或子目录名),并返回剩余的部分作为父目录路径.

参数:path 输入的完整路径字符串。

需要注意的是,dirname 修改传入的字符串内容,因此通常建议先复制一份原始路径再调用此函数。

  • 返回值:

    • 如果成功,则返回指向修改后的路径字符串的指针,表示输入路径的目录部分。
    • 如果失败,则返回nullptr。

示例:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <error.h>
#include <limits.h>
#include <libgen.h>
#include <string.h>

using namespace std;

int main()
{
    char path[64] = "/home/scott/projects/getIP.c";
    //复制路径以防被修改
    char *tempPath = strdup(path);
    char *retDir = dirname(tempPath);
    printf("orgPath:  %s\n", path);
    if(retDir != nullptr) {
        printf("retPath:  %s\n", retDir);
        free(tempPath);
    }
    else {
        perror("dirname Failed");
    }

    cout << "Hello Ubuntu1804!" << endl;
    return 0;
}

运行结果:

3.basename函数是 Linux 系统中的一个标准库函数,用于完成路径的最后一个分量,即文件名。

函数名basename
相关函数dirname, realpath
表头文件#include <libgen.h>
函数定义char *basename(char *path);
函数说明

basename 是一个用于提取路径字符串中最后一个分量(即文件名部分)的函数。它通常被用来处理文件路径并返回最终的文件名称。

参数:path可以是绝对路径也可以是相对路径。

返回值成功返回指向输入字符串中最后组件的指针,通常是文件名部分,失败nullptr

示例:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <error.h>
#include <limits.h>
#include <libgen.h>
#include <string.h>

using namespace std;


int main()
{
    char path[64] = "/home/scott/projects/getIP.c";
    //char path[64] = "./realpath_test.txt";
    //复制路径以防被修改
    char *tempPath = strdup(path);
    char *fileName = basename(tempPath);
    if(fileName != nullptr) {
        printf("fileName:  %s\n", fileName);
        free(tempPath);
    }
    else {
        perror("basename Failed");
    }

    cout << "Hello Ubuntu1804!" << endl;
    return 0;
}

运行结果:

参考:

realpath函数使用注意事项-优快云博客

Linux C++ realpath函数crash的解决方法-优快云博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值