c - una - ruta relativa
Obtener la ruta absoluta de un archivo (2)
Pruebe también con "getcwd"
#include <unistd.h>
char cwd[100000];
getcwd(cwd, sizeof(cwd));
std::cout << "Absolute path: "<< cwd << "/" << __FILE__ << std::endl;
Resultado:
Absolute path: /media/setivolkylany/WorkDisk/Programming/Sources/MichailFlenov/main.cpp
Entorno de prueba:
setivolkylany@localhost$/ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 8.6 (jessie)
Release: 8.6
Codename: jessie
setivolkylany@localhost$/ uname -a
Linux localhost 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u2 (2016-10-19) x86_64 GNU/Linux
setivolkylany@localhost$/ g++ --version
g++ (Debian 4.9.2-10) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
¿Cómo puedo convertir una ruta relativa a una ruta absoluta en C en Unix? ¿Hay una función del sistema conveniente para esto?
En Windows hay una función GetFullPathName
que hace el trabajo, pero no encontré algo similar en Unix ...
Use realpath() .
La
realpath()
derivará, de la ruta de acceso apuntada porfile_name
, una ruta de acceso absoluta que nombra el mismo archivo, cuya resolución no implica ''.
'',''..
'', o enlaces simbólicos. El nombre de ruta generado se almacenará como una cadena terminada en nulo, hasta un máximo de{PATH_MAX}
bytes, en el buffer apuntado porresolved_name
.Si
resolved_name
es un puntero nulo, el comportamiento derealpath()
está definido por la implementación.
El siguiente ejemplo genera una ruta de acceso absoluta para el archivo identificado por el argumento de enlace simbólico. El nombre de ruta generado se almacena en la matriz de ruta real.
#include <stdlib.h>
...
char *symlinkpath = "/tmp/symlink/file";
char actualpath [PATH_MAX+1];
char *ptr;
ptr = realpath(symlinkpath, actualpath);