2008-10-23 16 views

Respuesta

42

Uso realpath().

La función realpath() derivará, de la ruta apuntada por file_name, una ruta absoluta que nombres del 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 almacenamiento intermedio señalado por resolved_name.

Si resolved_name es un puntero nulo, el comportamiento de realpath() es definido por la implementación.


el ejemplo siguiente se genera una ruta absoluta para el archivo identificado por el argumento symlinkpath. El nombre de ruta generado es almacenado en la matriz actual.

#include <stdlib.h> 
... 
char *symlinkpath = "/tmp/symlink/file"; 
char actualpath [PATH_MAX+1]; 
char *ptr; 


ptr = realpath(symlinkpath, actualpath); 
+7

El 'uno más' no es necesario, thuogh se no hará ningún daño. –

+2

'GetFullPathName' en Windows funciona también para archivos que no existen. 'realpath' requiere que el camino exista. Este tipo de cosas apestan cuando quieres crear una ruta o un archivo. – Joakim

0

Proveedores "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 

Prueba medio ambiente:

[email protected]$/ lsb_release -a 
No LSB modules are available. 
Distributor ID: Debian 
Description: Debian GNU/Linux 8.6 (jessie) 
Release: 8.6 
Codename: jessie 
[email protected]$/ uname -a 
Linux localhost 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u2 (2016-10-19) x86_64 GNU/Linux 
[email protected]$/ 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. 
Cuestiones relacionadas