En C y glibc estándar, has argv [0]:
int main (int argc, char *argv[])
el primer elemento de la argv
array es el nombre del programa.
Sin embargo, no es necesariamente suficiente por sí solo para determinar dónde está exactamente el ejecutable. El argumento realmente lo establece el programa que ejecutó su programa, ya sea un shell o un administrador de ventanas, y no es de mucha ayuda. Si el programa se encuentra en el camino y se ejecuta el programa simplemente con
your_program
en una cáscara del golpe, a continuación, "your_program" es todo lo que se pondrá en argv [0].
Para la ruta completa del ejecutable, linux tiene el /proc
filesystem. Debajo de /proc
cada proceso en ejecución obtiene su propio "directorio", nombrado por su id de proceso. El proceso en ejecución también puede ver su propio subárbol bajo /proc/self
. Uno de los archivos que obtiene cada proceso es /proc/[pid]/exe
, que es un enlace simbólico al ejecutable real que está ejecutando el proceso.
Así se puede obtener la trayectoria real completa ejecutable como esto:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main(void) {
char exe[1024];
int ret;
ret = readlink("/proc/self/exe",exe,sizeof(exe)-1);
if(ret ==-1) {
fprintf(stderr,"ERRORRRRR\n");
exit(1);
}
exe[ret] = 0;
printf("I am %s\n",exe);
}
También puede ser capaz de pasar directamente a /proc/[pid]/exe
addr2line()
.
Lo puede obtener de argv [0] – BlackBear
¿Argv [0] no es lo que quiere, por alguna razón? – thb