2008-10-23 17 views
29

Unix'teki C'deki göreli yolu mutlak yola nasıl dönüştürebilirim? Bunun için uygun bir sistem işlevi var mı? Windows'taDosyaların mutlak yolunu alma

işi yapan bir GetFullPathName işlevi vardır, ama ben Unix üzerinde benzer bir şey ...

cevap

42

Kullanım realpath() bulamadık. Pathname gelen

realpath() fonksiyonu elde edemez, olan çözünürlük isimler aynı dosya, '..' '.' dahil veya sembolik bağlantılar etmediğini file_name, mutlak yol adı ile gösterilen . oluşturulan yol adı, tarafından işaret edilen arabelleğe en fazla {PATH_MAX} bayt kadar bir sıfır sonlandırılmış dizgisi olarak depolanacaktır.

resolved_name bir boş gösterici ise, realpath() davranışı uygulama tanımlı olduğu.


Aşağıdaki örnek symlinkpath bağımsız değişken tarafından tanımlanan dosya için bir mutlak yolunu oluşturur. Oluşturulan yol adı, gerçek yol dizisinde saklanan .

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


ptr = realpath(symlinkpath, actualpath); 
+7

'artı bir' o thuogh, gerekli değildir Zarar vermeyecek. Windows'taki –

+2

'GetFullPathName', varolan olmayan dosyalar için de çalışır. 'realpath' varoluşun yolunu gerektirir. Bir yol veya dosya oluşturmak istediğinizde bu tür bir berbat. – Joakim

0

Ayrıca "getcwd" denemek

#include <unistd.h> 

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

Sonuç:

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

Test ortamı:

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