2010-09-01 12 views
9

जब मैं लिखनेक्यों mkdir tilde (~) के साथ काम करने में विफल रहता है?

mkdir("~/folder1" , 0777); 
लिनक्स में

, यह एक निर्देशिका बनाने में विफल। यदि मैं विस्तारित होम निर्देशिका के साथ ~ को प्रतिस्थापित करता हूं, तो यह ठीक काम करता है। ~ का उपयोग करने में समस्या क्या है?

धन्यवाद

उत्तर

26

~ केवल शेल के लिए जाना जाता है और mkdir सिस्टम कॉल पर नहीं जाता है।

लेकिन अगर आप कोशिश:

system("mkdir ~/foo"); 

इस काम करता है के रूप में "mkdir ~/foo" एक खोल में भेजा जाता है और खोल फैलता ~$HOME को

आप mkdir साथ $HOME का उपयोग करना चाहते हैं, तो आप कर सकते हैं getenv फ़ंक्शन का उपयोग करें:

char path[MAX]; 
char *home = getenv ("HOME"); 
if (home != NULL) { 
     snprintf(path, sizeof(path), "%s/new_dir", home); 
     // now use path in mkdir 
     mkdir(path, PERM); 
} 
+10

-1 एक विशाल बफर ओवरफ़्लो समस्या के साथ उदाहरण कोड देने के लिए। आपको स्प्रिंटफ का उपयोग करने के लिए इसे संपादित करना चाहिए या 'sprintf' को कॉल करने से पहले' home' की लंबाई की जांच करनी चाहिए। –

5

~ आमतौर पर खोल से विस्तार होता है। खोल का उपयोग नहीं करना मतलब है कि आप इसे विस्तारित करने के लिए ज़िम्मेदार हैं।

12

~ एक शैल मेटा-कैरेक्टर है, न कि कर्नेल द्वारा प्रदत्त 'शॉर्टकट'।

wordexp(3) या glob(3) मैन पेज देखें यदि आप आसानी से ~ का समर्थन करना चाहते हैं। (वे आपकी इच्छा से कहीं अधिक कर सकते हैं।)

+0

(o11c के लिए धन्यवाद ई 'ग्लोब (3)' प्रविष्टि; यह '~' नहीं करता है लेकिन अभी भी उपयोगी है।) – sarnold

+0

हां यह करता है, उस पृष्ठ में 'GLOB_TILDE' (और 'GLOB_TILDE_CHECK') देखें। – o11c

संबंधित मुद्दे