我使用以下代码获取C ++文件的当前工作目录
//Getting current working directory
getcwd( wd, 1024 );
std::string cwd = wd;
如果从另一个函数调用此文件中的函数,则当前工作目录将成为调用函数的路径。
如何获取原始文件/二进制文件所在位置的当前目录?
我正在添加细节,因为问题很混乱。
我创建了一个从Scilab调用的.so文件。如果我使用readlink(),我得到的路径为/usr/bin/scilab-bin
,这不是我想要的。如何获取so文件的路径,当前函数在?
答案 0 :(得分:0)
这个问题几乎与How to check what shared libraries are loaded at run time for a given process?重复。您需要的信息只能从/ proc文件系统获得,告诉您在您的过程中哪些文件已动态映射到内存中。
答案 1 :(得分:0)
您在评论中提到.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存根和复制重定位)