Ottenere il percorso assoluto di un file

Come posso convertire un percorso relativo in un percorso assoluto in C su Unix? C’è una funzione di sistema conveniente per questo?

Su Windows c’è una funzione GetFullPathName che fa il lavoro, ma non ho trovato qualcosa di simile su Unix …

Usa realpath () .

La funzione realpath() deve derivare, dal percorso indicato da file_name , un percorso assoluto che nomina lo stesso file, la cui risoluzione non implica ‘ . ‘,’ .. ‘, o collegamenti simbolici. Il percorso generato deve essere memorizzato come stringa a terminazione nulla, fino a un massimo di {PATH_MAX} byte, nel buffer indicato da resolved_name .

Se resolved_name è un puntatore nullo, il comportamento di realpath() è definito dall’implementazione.


L’esempio seguente genera un percorso assoluto per il file identificato dall’argomento symlinkpath. Il percorso generato viene memorizzato nell’array actualpath.

 #include  ... char *symlinkpath = "/tmp/symlink/file"; char actualpath [PATH_MAX+1]; char *ptr; ptr = realpath(symlinkpath, actualpath); 

Prova anche “getcwd”

 #include  char cwd[100000]; getcwd(cwd, sizeof(cwd)); std::cout << "Absolute path: "<< cwd << "/" << __FILE__ << std::endl; 

Risultato:

 Absolute path: /media/setivolkylany/WorkDisk/Programming/Sources/MichailFlenov/main.cpp 

Ambiente di test:

 [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.