C/C++编程:获取程序可执行文件路径和运行路径
准备readlink()调用,将符号链接字符串的一份副本置于buffer指向的字符数组中。linux系统中有个符号链接:/proc/self/exe 它代表当前程序,所以可以用readlink读取它的源路径就可以获取当前程序的绝对路径进程可使用 getcwd()来获取当前工作目录代码Linux#include <iostream>#include <unistd.h>#in
·
准备
- 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
/**
* 程序运行过程中获得可执行程序存储于文件系统中的全路径
* @return {std::string} "": 无法获得; != "": 返回值即是程序在
* 文件系统上的存储全路径
*/
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;
}
/**
* 程序运行过程中获得其运行路径
* @return {std::string} "": 无法获得; != "": 返回值即为程序的运行路径
*/
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;
}
参考
更多推荐
已为社区贡献12条内容
所有评论(0)