kacy16 发表于 2012-05-24 14:54

在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文件和它所需打开的文件在同一目录下?谢谢!


   

kacy16 发表于 2012-05-25 14:19

自己顶一下,请各位高手帮忙看看,谢谢!

Myth_cn 发表于 2012-05-25 14:47

如果应用程序和so文件的相对路径固定,可以使用readlink(“/proc/self/exe”, ...)获取应用程序路径, 从而知道so文件路径

kacy16 发表于 2012-05-28 22:07

谢谢Myth_cn兄的回答,问题是应用软件和so文件的路径不能确定是相对固定的。应用软件是动态调用so文件,
由第三方开发,我们不清楚它和so文件的相对路径。

kacy16 发表于 2012-07-17 14:03

继续各位发表意见,谢谢!

ttcfont 发表于 2012-07-17 14:22

从道理上讲, 系统应该是不会设计成可以做到这功能的.

好比正常 OS 不会有一个允许普通进程 "读取其它进程内存区域" 的系统调用.

有没有黑魔法就不知道了.

问题是库接口就不应该这样设计. 照理说, 根据具体需要可以选择

1) 文件路径作为参数传递进来
2) 文件路径放在 /etc 下的配置文件里
3) 要求用户用环境变量指向文件

kacy16 发表于 2012-09-21 21:17

好的,谢谢!

MMMIX 发表于 2012-09-22 10:54

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]
查看完整版本: 在linux系统环境下怎么打开和动态库(so文件)的当前目录下的另外一个文件?