2013-03-01 7 views
8

मैं सिर्फ पता चला कि खुला() (आदमी 2 खुला) सिस्टम कॉल दो संस्करण:खुला() सिस्टम कॉल बहुरूपता

int open(const char *pathname, int flags); 
    int open(const char *pathname, int flags, mode_t mode); 

और वास्तव में, एक के लिए एक एकल सी फ़ाइल में उपयोग कर सकते हैं और दोनों होगा काम। मानक सी इसे कैसे प्राप्त कर सकता है?

+0

@ZhangYuan सी में? हर्गिज नहीं। –

उत्तर

4

वास्तव में, यह नहीं सी ++ है - शैली समारोह से अधिक भार। यह सिर्फ इतना है कि open() variadic है:

int open(const char *fname, int flags, ...); 

और केवल यदि "झंडे" यह आवश्यकता होती है, यह तीसरा तर्क के लिए दिखेगा।

+0

मैन पेज में झंडे और मोड के बीच कोई संबंध नहीं देखा। विस्तृत करने के लिए परवाह? – lang2

+0

@ lang2 मोड * केवल आवश्यक होने पर ही उपयोग किया जाता है, उदाहरण के लिए, जब 'O_CREAT' को ध्वज के रूप में निर्दिष्ट किया जाता है। फ़ाइल मोड के बारे में बात करने में कोई समझ नहीं है, उदाहरण के लिए, आप पढ़ने के लिए एक फ़ाइल खोलते हैं ... –

4

इसे एक चर तर्क तर्क के रूप में किया जा सकता है।

open के लिए POSIX प्रलेखन इस तरह यह निर्दिष्ट करता है:

int open(const char *path, int oflag, ...); 
संबंधित मुद्दे