21xrx.com
2024-11-22 10:18:03 Friday
登录
文章检索 我的文章 写文章
Linux C++如何获取当前运行路径?
2023-06-29 02:53:56 深夜i     --     --
Linux C++ 获取当前运行路径

在 Linux C++ 编程中,经常需要获取当前程序的运行路径,以便于进行文件读写等操作。本文将介绍几种获取当前运行路径的方法。

1. 使用 getcwd() 函数

getcwd 函数可以获取当前进程的工作目录,即运行程序的位置。它的函数原型如下:


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

其中,buf 是一个指向存放路径的缓冲区,size 是缓冲区大小。如果 buf 参数为 NULL,getcwd 函数会返回一个指向新分配的缓冲区的指针。如果 buf 不为 NULL,它必须指向一个大小至少为 size 的缓冲区,getcwd 函数会将路径复制到该缓冲区中。

下面是使用 getcwd() 函数获取当前运行路径的示例代码:


#include <iostream>

#include <unistd.h>

int main()

{

  char path[1024];

  if (getcwd(path, sizeof(path)) != NULL)

    std::cout << "Current working directory is: " << path << std::endl;

  else

    std::cerr << "getcwd() failed" << std::endl;

  return 0;

}

2. 使用 realpath() 函数

realpath 函数可以将一个相对路径或符号链接转化为绝对路径,如果该路径不存在,则返回 NULL 并设置 errno 错误。

它的函数原型如下:


char *realpath(const char *path, char *resolved_path);

其中,path 是待转换的路径,resolved_path 是用于存放转换后路径的缓冲区。如果 resolved_path 参数为 NULL,realpath 函数会返回一个包含转换后路径的新分配的缓冲区。如果 resolved_path 不为 NULL,它必须指向一个大小至少为 PATH_MAX 的缓冲区(通常为 4096),realpath 函数会将转换后的路径复制到该缓冲区中。

下面是使用 realpath() 函数获取当前运行路径的示例代码:


#include <iostream>

#include <stdlib.h>

#include <limits.h>

int main()

{

  char resolved_path[PATH_MAX];

  if (realpath(".", resolved_path) != NULL)

    std::cout << "Current working directory is: " << resolved_path << std::endl;

  else

    std::cerr << "realpath() failed" << std::endl;

  return 0;

}

总结

通过使用 getcwd() 或 realpath() 函数,我们可以很方便地获取当前程序的运行路径。需要注意的是,这两个函数都有可能失败,因此在应用时需要做好错误处理。同时,为了避免缓冲区溢出,我们也需要合理设置缓冲区大小。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复