rt,可执行文件不应该受限于调用它时所在的路径。
在shell中,可以这样搞:
cd `dirname $0`
在c++中如何做呢?
在我们的main函数开始的时候,调用一下这个方法,是个好主意。
代码如下:
#include
#include
#include
#include
using namespace std;
int chdirName0(){
int ret = -1;
string _curPath_s_;
char _exec_name_ [BUFSIZ];
ret = readlink ("/proc/self/exe", _exec_name_, BUFSIZ);
if(ret==-1){
printf("get exec file's path failed.\n");
return -1;
}
string _temp_s_ = _exec_name_;
int _index_s_ = _temp_s_.find_last_of("/");
if(_index_s_==string::npos){
printf("get exec file's dir path failed.\n");
return -2;
}
_curPath_s_ = _temp_s_.substr(0, _index_s_);
ret = chdir(_curPath_s_.c_str());
if(ret!=0){
printf("chdir error.\n");
return -3;
}
return 0;
}
int main(){
chdirName0();
char pwd[100];
printf("%s\n", getcwd(pwd, 100));
}
具体效果如下:
[work@xxx sb7]$ g++ -o b ch.cpp
[work@xxx sb7]$ ./b
/home/work/gaofeng/sb7
[work@xxx sb7]$ cd ../..
[work@xxx ~]$ ./gaofeng/sb7/b
/home/work/gaofeng/sb7
在 /usr/include/unistd.h中有这样的函数可以使用:
chdir 类似于cd那个操作
getcwd 获得当前工作目录