2008-10-23 13 views
29

मैं यूनिक्स पर सी में एक पूर्ण पथ के सापेक्ष पथ को कैसे परिवर्तित कर सकता हूं? क्या इसके लिए कोई सुविधाजनक सिस्टम फ़ंक्शन है?फ़ाइल का पूर्ण पथ प्राप्त करना

Windows पर एक GetFullPathName समारोह है कि काम करता है वहाँ है, लेकिन मैं यूनिक्स पर कुछ इसी तरह ...

उत्तर

42

उपयोग realpath() नहीं मिला।

realpath() समारोह निकाले जाते हैं जाएगा, पथ नाम से file_name, एक निरपेक्ष पथ नाम से की ओर इशारा किया है कि नाम एक ही फाइल, जिसका संकल्प शामिल है नहीं '.', '..', या सांकेतिक लिंक । उत्पन्न पथ नाम ,, एक अशक्त-समाप्त स्ट्रिंग के रूप में जमा किया जाएगा अप {PATH_MAX} बाइट्स की एक अधिकतम करने में बफर resolved_name द्वारा की ओर इशारा किया।

तो resolved_name एक अशक्त सूचक है, realpath() के व्यवहार कार्यान्वयन परिभाषित किया गया है।


निम्न उदाहरण फ़ाइल symlinkpath तर्क से पहचान के लिए एक पूर्ण पथ नाम उत्पन्न करता है। जनरेटेड पथनाम वास्तविकपथ सरणी में संग्रहीत है।

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


ptr = realpath(symlinkpath, actualpath); 
+7

'प्लस वन', आवश्यक नहीं है यह thuogh कोई नुकसान नहीं होगा। विंडोज़ पर –

+2

'GetFullPathName' भी मौजूद नहीं है। 'realpath' के अस्तित्व के पथ की आवश्यकता है। जब आप पथ या फ़ाइल बनाना चाहते हैं तो इस प्रकार का बेकार हो जाता है। – Joakim

0

इसके अलावा "getcwd" कोशिश

#include <unistd.h> 

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

परिणाम:

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

परीक्षण वातावरण:

[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. 
संबंधित मुद्दे