在linux系统环境下怎么打开和动态库(so文件)的当前目录下的另外一个文件?
大家好,现在碰到一问题,自己开发完成的一个API动态库(so),其中有一个功能是open一个文本文件,该文本文件存放的路径和该so文件一致,使用的代码大致如下:
hFile=open("./mytext.text",O_BINARY);
但是实际在测试中发现, 该由so文件来打开的文件的实际路径位置需是和该执行文件的实际路径
相一致。
测试的环境如下:
/home/kacy/目录下:
1有 test.exe 文件。实际测试中发现mytext.text文件需存放在该位置。
2在该目录下有so目录,so目录下 有 A:test.so文件,B: mytext.text文件。
所以请各位指点一下,怎么可以使用该so文件和它所需打开的文件在同一目录下?谢谢!
自己顶一下,请各位高手帮忙看看,谢谢! 如果应用程序和so文件的相对路径固定,可以使用readlink(“/proc/self/exe”, ...)获取应用程序路径, 从而知道so文件路径
谢谢Myth_cn兄的回答,问题是应用软件和so文件的路径不能确定是相对固定的。应用软件是动态调用so文件,
由第三方开发,我们不清楚它和so文件的相对路径。 继续各位发表意见,谢谢! 从道理上讲, 系统应该是不会设计成可以做到这功能的.
好比正常 OS 不会有一个允许普通进程 "读取其它进程内存区域" 的系统调用.
有没有黑魔法就不知道了.
问题是库接口就不应该这样设计. 照理说, 根据具体需要可以选择
1) 文件路径作为参数传递进来
2) 文件路径放在 /etc 下的配置文件里
3) 要求用户用环境变量指向文件
好的,谢谢! kacy16 发表于 2012-05-24 14:54 static/image/common/back.gif
大家好,现在碰到一问题,自己开发完成的一个API动态库(so),其中有一个功能是open一个文本文件,
该文本文件存放的路径和该so文件一致,使用的代码大致如下:
hFile=open("./mytext.text",O_BINARY);
但是实际在测试中发现, 该由so文件来打开的文件的实际路径位置需是和该执行文件的实际路径
相一致。
這實際是你對這行代碼的語義有誤解:open("./mytext.text", ...) 的意思是說打開當前目錄下的名為 mytext.text 的文件。這個當前目錄是進程的一個屬性(默認是從其父進程繼承的),和這個 open 所在的 so 文件的位置是一點關係沒有。
页:
[1]