linux系统中有个符号链接:/proc/self/exe 它代表当前程序,所以可以用readlink读取它的源路径就可以获取当前程序的绝对路径readlink可以获取exe所在的路径(直接和进程关联);无法获得so的路径,so路径可以用dladdr,参考另一篇文章
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#define MAXBUFSIZE 1024int main ( int argc, char * argv[] ){char buf[ MAXBUFSIZE ];int count;count = readlink( "/proc/self/exe", buf, MAXBUFSIZE );if ( count < 0 || count >= MAXBUFSIZE ){printf( "Failed\n" );return( EXIT_FAILURE );}/* readlink仅将软链接文件的内容拷贝到buf中,却不会追加字符串结束符,因此我们需要自己追加字符串结束符。*/buf[ count ] = '\0';printf( "/proc/self/exe -> [%s]\n", buf );return( EXIT_SUCCESS );}