2008-11-18 16 views
116

मैं एक सी प्रोग्राम बना रहा हूं जहां मुझे उस निर्देशिका को प्राप्त करने की आवश्यकता है जिसे प्रोग्राम शुरू किया गया है। यह प्रोग्राम यूनिक्स कंप्यूटर के लिए लिखा गया है। मैं opendir() और telldir() पर देख रहा हूं, लेकिन telldir()off_t (long int) देता है, इसलिए यह वास्तव में मेरी सहायता नहीं करता है।सी प्रोग्राम में वर्तमान निर्देशिका कैसे प्राप्त करें?

मैं स्ट्रिंग (चार सरणी) में वर्तमान पथ कैसे प्राप्त कर सकता हूं?

उत्तर

218

क्या आपने getcwd() पर एक नज़र डाली है?

#include <unistd.h> 
char *getcwd(char *buf, size_t size); 

सरल उदाहरण: प्रश्न यूनिक्स टैग है

#include <unistd.h> 
#include <stdio.h> 
#include <errno.h> 

int main() { 
    char cwd[1024]; 
    if (getcwd(cwd, sizeof(cwd)) != NULL) 
     fprintf(stdout, "Current working dir: %s\n", cwd); 
    else 
     perror("getcwd() error"); 
    return 0; 
} 
+8

चुनिंदा नाइट्स चुनना, अनावश्यक लगता है, और प्रोग्राम इसकी निकास स्थिति के माध्यम से विफलता पर भी सफलता की रिपोर्ट करता है। अन्यथा, एक अच्छा उदाहरण है। –

+18

ओह, और fprintf (stdout, ...) के स्थान पर printf (...) का उपयोग करने के लिए यह अधिक पारंपरिक है? –

+11

@ जोनाथन लेफ्लर: यह नाइट्स का सबसे पसंदीदा नहीं है। यह है: 'int मुख्य()' 'int मुख्य (शून्य) होना चाहिए। –

59

getcwd के लिए मैन पेज देखें।

+8

उदाहरण कोड स्निपेट भी शामिल करने के लिए बेहतर है। – sudo

+4

@angad मछली को एक आदमी को सिखाता है लेकिन कम से कम उसे झील/समुद्र/महासागर के रास्ते दिखाता है :) – mtk

+1

google> man :) –

9

हालांकि, लोगों को भी यह यात्रा करने के लिए जब अपने लक्ष्य प्लेटफार्म विंडोज है मिलता है, और विंडोज के लिए जवाब GetCurrentDirectory() समारोह है:

DWORD WINAPI GetCurrentDirectory(
    _In_ DWORD nBufferLength, 
    _Out_ LPTSTR lpBuffer 
); 

ये उत्तर दोनों सी और सी ++ कोड पर लागू होते हैं।

user4581301 द्वारा comment में अन्य प्रश्न पर सुझाए गए लिंक, और Google खोज साइट के साथ वर्तमान शीर्ष विकल्प के रूप में सत्यापित: microsoft.com getcurrentdirectory '।

0

ध्यान दें कि getcwd(3) माइक्रोसॉफ्ट के libc: getcwd(3) में भी उपलब्ध है, और वैसे ही काम करता है जैसा आप उम्मीद करेंगे।

-loldnames (oldnames.lib, जो ज्यादातर मामलों में स्वचालित रूप से किया जाता है) से लिंक होना चाहिए, या _getcwd() का उपयोग करें। विंडोज आरटी के तहत अपरिवर्तित संस्करण अनुपलब्ध है।

0
#include <stdio.h> /* defines FILENAME_MAX */ 
//#define WINDOWS /* uncomment this line to use it for windows.*/ 
#ifdef WINDOWS 
#include <direct.h> 
#define GetCurrentDir _getcwd 
#else 
#include <unistd.h> 
#define GetCurrentDir getcwd 
#endif 

int main(){ 
    char buff[FILENAME_MAX]; 
    GetCurrentDir(buff, FILENAME_MAX); 
    printf("Current working dir: %s\n", buff); 
    return 1; 
} 
संबंधित मुद्दे