准备
- readlink()调用,将符号链接字符串的一份副本置于buffer指向的字符数组中。
- linux系统中有个符号链接:/proc/self/exe 它代表当前程序,所以可以用readlink读取它的源路径就可以获取当前程序的绝对路径
- 进程可使用 getcwd()来获取当前工作目录
代码
Linux
#include <iostream>
#include <unistd.h>
#include <cstring>
#define BUF_SIZE 4096
#define ACL_TLS_OUT_OF_INDEXES 0xffffffff
std::string acl_process_path()
{
const char *myname = "acl_process_path";
char buf_ptr[BUF_SIZE];
int ret;
ret = readlink("/proc/self/exe", buf_ptr, BUF_SIZE);
if (ret < 0) {
printf("%s(%d): readlink error(%s)",
myname, __LINE__, strerror(errno));
return "";
}
return buf_ptr;
}
std::string acl_getcwd()
{
const char *myname = "acl_getcwd";
char buf_ptr[BUF_SIZE];
char *ptr;
ptr = getcwd(buf_ptr, BUF_SIZE);
if (ptr == NULL) {
printf("%s(%d): getcwd error(%s)",
myname, __LINE__, strerror(errno));
}
return (ptr);
}
int main(int argc,char** argv)
{
std::string ptr = acl_process_path();
std::string ptr1 = acl_getcwd();
printf("current process file's path: %s, getcwd: %s\n",
!ptr.empty() ? ptr.c_str() : "unknown", !ptr1.empty() ? ptr1.c_str() : "unknown");
return 0;
}
参考