[英]Directory of running program on Linux?
嘿,我一直在写一个程序(一种类似于电子书的查看类东西),它从可执行文件所在的文件夹中的一个文件夹中加载文本文件。 这给我带来了一个问题,因为例如,如果我使用“ ./folder/folder/program”命令从另一个目录运行该程序,由于工作目录不正确,我的程序将找不到文本。 我没有绝对目录,因为我希望该程序具有可移植性。 有什么方法可以获取可执行文件正在运行的确切目录,即使它是从其他目录运行的也是如此。 我听说可以将argc [0]和getcwd()组合在一起,但是当目录中有空格时,argc被截断了(我想呢?),所以我想避免这种情况。
我预先在Linux上使用g ++,Thanx
将图书添加到图书馆后,您可以记住其绝对路径。
当程序依赖于将从工作目录而不是从其他目录启动的事实时,这还不错。 这就是为什么存在带有“工作目录”参数的各种“链接”的原因。
您不必以自己想要的方式处理此类情况。 只需检查所有必要的文件和目录结构是否到位,如果没有,则记录说明错误。
或者,每当您的程序启动且找不到所需文件时,该程序就会要求将路径指向“图书库”。
我仍然看不到知道您当前目录名称的原因。
#include <boost/filesystem/convenience.hpp>
#include <iostream>
#include <ostream>
int main(int argc, char** argv)
{
boost::filesystem::path argvPath( argv[0] );
boost::filesystem::path executablePath( argvPath.parent_path() );
boost::filesystem::path runPath( boost::filesystem::initial_path() );
std::cout << executablePath << std::endl;
std::cout << runPath << std::endl;
return 0;
}
您可以通过阅读命令行来获取正在运行的程序的路径。 在Linux中,您可以通过将/ proc文件夹读为/ proc / PID / CommandLine来获取命令行
有空格时, argv[0]
不会被截断。 但是,当从PATH环境变量中列出的目录运行程序时,它将仅具有程序名称,而没有路径。
无论如何,您在此处尝试做的并不是针对Unix / Linux程序的良好设计。 数据文件未与程序文件存储在同一目录中,因为这样做会使应用适当的安全策略变得困难。
在我看来,获得所需内容的最佳方法是使用Shell脚本启动实际程序。 这与Firefox在Linux系统上启动的方式非常相似。 Shell将脚本的名称放入$0
并且此变量将始终具有路径。 然后,您可以使用环境变量或命令行参数为程序提供数据文件的位置,如下所示:
dir=`dirname "$0"`
cd "$dir/../data/"
"$dir/real-program"
我会安排您的程序,使其文件如下所示:
install-dir/bin/program
install-dir/bin/real-program
install-dir/etc/config
install-dir/data/book-file.mobi
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.