Cómo obtener la ruta absoluta del archivo de configuración en Linux

  
                  

Los programas de Linux generalmente tienen archivos de configuración. Si el archivo de configuración utiliza una ruta relativa, por ejemplo: "../src/config.xml"

, entonces no hay ningún problema en la ruta actual;

Si cambia a otra ruta, hay un problema con la ejecución, no se puede encontrar el archivo;

Al escribir la secuencia de comandos, primero debe ingresar a la ruta donde se encuentra el archivo ejecutable y luego ejecutarlo;

Si desea eliminar este efecto, no puede escribir la ruta muerta, entonces necesita convertir la ruta relativa en una ruta absoluta;

Paso:

1. Primero, obtenga la ruta donde se encuentra el programa.;

2. Agregue la ruta relativa, luego obtenga la ruta absoluta;

Tenga en cuenta: no es la ruta actual, getcwd puede obtener la ruta actual, no la ruta absoluta del programa; estaba en ese momento Este error

A continuación se describe cómo obtener la ruta donde se encuentra el programa:

Método 1. Si no le preocupan los posibles riesgos de seguridad, puede usar procfs, luego readlink, para colocar el pid del proceso actual correspondiente al directorio a continuación. Se lee la ubicación a la que apunta el archivo (tenga en cuenta que primero debe montar procfs)

pit_t mypid = getpid ();

sprintf (strsrc, "/proc /% d /file", mypid);

readlink (strsrc, strdest, LEN); //LEN es mejor su _POSIX_PATH_MAX

Método 2. Utilice la función realpath, luego dirname; finalmente, empalme la ruta absoluta del archivo de configuración; Br>

ruta de caracteres [PATH_MAX];

char * rpath = realpath (argv [0], ruta);

LOG_IT (LOG_MAIN, LOG_DEBUG, "argv [0]:% s, realpath% s ", argv [0], rpath);

char * base = basename (ruta);

char * dir = dirname (ruta);

LOG_IT (LOG_MAIN, LOG_DEBUG, "base:% s, dir% s", base, dir);

char conf_file [2048];

int maxlen_conf = 2048;

snprintf (conf_file, maxlen_conf, "% s /% s ", dir," ../src/config.xml ");

LOG_IT (LOG_MAIN, LOG_DEBUG," conf_file% s ", conf_file);

Copyright © Conocimiento de Windows All Rights Reserved