在linux下 相对路径问题

比如project目录是当前目录

该目录下有bin子目录
bin下有a.bin文件
结构project/bin/a.bin
由于我在project目录下 则我运行a.bin的命令为 bin/a.bin
a.bin文件的功能是以相对路径创建一个文件:
fp = fopen("resultl.txt", "w+");
那么为什么result.txt最终不是以a.bin所在的目录作为相对路径的起始点
却以我运行bin/a.bn这条命令的当前目录作为相对路径的起始点呢
如果是这样 每次一定要进入a.bin所在的目录运行才能得到正确的相对路径不是很麻烦吗
而别人写的软件是怎么做到的
比如其他软件,在任何位置运行他,他所产生的文件都是以软件的程序运行文件作为相对路径的起始,
而不是以用户当前所在的目录作为起始点。
难道都是绝对路径吗:如果是绝对路径,由于开发者不会知道使用者会将软件放到什么位置,那么必定有获得当前程序文件的代码,这个要用相对路径,而这样的话,相对路径又是在当前目录,又获取不到,这是怎么做到的

搞清楚当前工作路径和当前文件路径的区别
对于shell,环境变量pwd就是当前工作路径
对于你的程序,你可以获取当前文件的路径,或者安装的时候,根据用户设定输出一个配置文件,程序读取该配置文件决定路径追问

我的意思是最好不要用绝对路径 有办法嘛?
还有安装的话 如果我移动了执行程序所在目录 只要相关目录的结构不变依然可以用 主要是这点

追答

软件一般都是有配置文件的,从配置文件中读路径

你自己的程序嘛,当然可以用相对路径,但你一定要确定相对“什么路径“

相对最后还是要转成绝对,不是你的程序就是系统

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-02-20
Path=`dirname "$0"`
Path=`cd "$Path";pwd`

这样就可以了,一般在脚本开头会先获得当前工作路径,并切换到当前工作路径.

不懂可以问我.

第2个回答  2014-02-20
既然lz已经发现了标准函数库打开文件的这个机制,那么我们就暂且认可这个机制。
下面说一些lz认识上的一个小问题,虽然程序可以放在任意位置,但是unix的库函数提供了程序可以取到它的所在目录的函数,可以类比pwd命令。
于是程序在调用标准函数库时候完全可以传绝对路径过去,达到存在自己路径的目的。
相似回答