如何获取 c++ 文件的当前工作目录
How to get current working directory of a c++ file
我使用以下代码获取C++文件的当前工作目录
//Getting current working directory
getcwd( wd, 1024 );
std::string cwd = wd;
如果此文件中的函数是从另一个函数调用的,则当前工作目录将成为调用函数的路径。
如何获取原始文件/二进制文件所在的当前目录?
我正在添加细节,因为这个问题令人困惑。
我创建了一个从Scilab调用的.so文件。如果我使用 readlink(),我会得到要/usr/bin/scilab-bin
的路径,这不是我想要的。如何获取当前函数所在的 so 文件的路径?
这个问题几乎是 如何检查在运行时为给定进程加载了哪些共享库?的重复。您需要的信息只能从/proc 文件系统获得,告诉您哪些文件已动态映射到进程中的内存中。
你在评论中提到了.so
文件,所以我假设你的目标是GNU/Linux。 您可以使用 dladdr1
函数获取包含地址的.so
文件的路径名,如下所示:
#include <string>
#include <vector>
#include <dlfcn.h>
#include <libgen.h>
#include <link.h>
#include <string.h>
static std::string
get_path ()
{
Dl_info info;
void *extra_info;
if (dladdr1 (reinterpret_cast <void *> (&get_path),
&info, &extra_info, RTLD_DL_LINKMAP) == 0)
// Some form of error handling.
return "";
link_map *lm = static_cast<link_map *> (extra_info);
// Make a copy of l_name because dirname modifies its argument.
std::vector<char> buffer (lm->l_name, lm->l_name + strlen (lm->l_name) + 1);
return dirname (buffer.data ());
}
要dladdr1
的第一个参数非常随意,但最好不要使用从 DSO 导出的符号,因为它最终可能会引用不同对象中的某些内容(由于 PLT 存根和副本重定位)。
相关文章:
- C++输入重定向导致文件参数工作时出错
- 如何在 unix 中获取当前工作目录中最大的文件
- 写文件在工作吗?C
- 如何获取 c++ 文件的当前工作目录
- C 可执行文件不从文件夹工作,而是在Mac上从控制台上工作
- c++文件指针工作不正常
- 当前工作目录中的文件I/O会失败吗
- 更改当前工作目录 VS13?
- 获取当前工作目录的相对路径,而不是绝对路径
- 为什么 g++ -MM 选项忽略当前工作目录的包含文件
- 如何在不破坏当前工作代码的情况下添加小数
- VIsual C++可执行文件不工作
- Win32 文件 IO 工作,但打开 et.失败.这是怎么回事
- 无法使头文件正常工作
- 如何更改当前工作目录
- 猫鼬网络服务器获取当前工作线程
- 生成文件:更改工作目录以进行检查
- 二进制文件如何工作?(从 C++ 的角度来看)
- 问题.所有功能都可以在发布文件夹中工作,但不能在程序文件中工作
- c++头文件的当前工作目录