免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2725 | 回复: 6

[C] BSD下应用程序如何获取自身路径?(BSD板块没有回答~~) [复制链接]

论坛徽章:
0
发表于 2009-06-12 01:16 |显示全部楼层
10可用积分
[本来是发在BSD板块的,但好久没人回答,只好借贵宝地一问。 ]

请问在 *BSD(FreeBSD、NetBSD、OpenBSD)下如何获取当前可执行程序自身文件所在的路径?(没有proc文件系统)

比如Windows下面用
GetModuleFileName( NULL, szModulePath, MAX_PATH * sizeof TCHAR )
可以获取,Linux下可用
readlink ("/proc/self/exe", szImagePath, BUFSIZ)

*BSD用C或者C++应该怎样获取呢?

论坛徽章:
0
发表于 2009-06-12 01:27 |显示全部楼层
事实上,Unix/Linux没有可靠的途径可以实现你的需求,很遗憾

论坛徽章:
0
发表于 2009-06-12 10:08 |显示全部楼层
realpath(argv[0], app_path)

论坛徽章:
0
发表于 2009-06-12 10:24 |显示全部楼层

论坛徽章:
0
发表于 2009-06-12 10:28 |显示全部楼层

回复 #1 swxlion 的帖子

这是一个x86/FreeBSD 4.5-RELEASE系统中利用proc获取绝对路径的例子   

--------------------------------------------------------------------------   

/*   

* gcc -Wall -pipe -g -static -o myprog_4 myprog_4.c   

*/   

#include   

#include   

#include   

#include   



#define MAXBUFSIZE 1024   



int main ( int argc, char * argv[] )   

{   

char proc[64];   

char buf[ MAXBUFSIZE ];   

int count;   



sprintf( proc, "/proc/%d/file", ( unsigned int )getpid() );   

count = readlink( proc, buf, MAXBUFSIZE );   

if ( count < 0 || count >= MAXBUFSIZE )   

{   

printf( "Failed\n" );   

return( EXIT_FAILURE );   

}   

buf[ count ] = ’\0’;   


printf( "%s -> [%s]\n", proc, buf );   

return( EXIT_SUCCESS );   

} /* end of main *%

论坛徽章:
0
发表于 2009-06-12 12:33 |显示全部楼层
原帖由 ziggler 于 2009-6-12 10:28 发表
这是一个x86/FreeBSD 4.5-RELEASE系统中利用proc获取绝对路径的例子   

--------------------------------------------------------------------------   

/*   

* gcc -Wall -pipe -g -static -o myp ...

LZ说了没有proc,所以好像没什么好办法

论坛徽章:
0
发表于 2009-06-12 12:47 |显示全部楼层
getcwd 和 ps里不是有的么
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP