一尘不染

如何实现readlink查找路径

linux

使用readlink函数作为“如何在C中找到可执行文件的位置”的解决方案?,我如何将路径转换为char数组?另外,变量buf和bufsize代表什么,以及如何初始化它们?

编辑:我试图获取当前正在运行的程序的路径,就像上面链接的问题一样。这个问题的答案说来有用readlink("proc/self/exe")。我不知道如何在我的程序中实现它。我试过了:

char buf[1024];  
string var = readlink("/proc/self/exe", buf, bufsize);

这显然是不正确的。


阅读 309

收藏
2020-06-03

共1个答案

一尘不染

使用的readlink()函数正确的正确使用readlink功能。

如果您的路径位于中std::string,则可以执行以下操作:

#include <unistd.h>
#include <limits.h>

std::string do_readlink(std::string const& path) {
    char buff[PATH_MAX];
    ssize_t len = ::readlink(path.c_str(), buff, sizeof(buff)-1);
    if (len != -1) {
      buff[len] = '\0';
      return std::string(buff);
    }
    /* handle error condition */
}

如果只在固定路径下走:

std::string get_selfpath() {
    char buff[PATH_MAX];
    ssize_t len = ::readlink("/proc/self/exe", buff, sizeof(buff)-1);
    if (len != -1) {
      buff[len] = '\0';
      return std::string(buff);
    }
    /* handle error condition */
}

要使用它:

int main()
{
  std::string selfpath = get_selfpath();
  std::cout << selfpath << std::endl;
  return 0;
}
2020-06-03