2012-10-23 19 views
6

mkfifo फ़ंक्शन 2 तर्क, पथ और मोड लेता है। लेकिन मुझे नहीं पता कि इसका उपयोग किस पथ का है। मैं नामित पाइप बनाने और mkfifo में पथ के रूप में एक छोटा प्रोग्राम लिख रहा हूं। उदाहरण के लिए /home/username/Documents का उपयोग करना, लेकिन यह हमेशा Error creating the named pipe.: File exists संदेश के साथ -1 देता है।mkfifo() त्रुटि ---> "नामित पाइप बनाने में त्रुटि: फ़ाइल मौजूद है"

मैंने इस डीआईआर को कई बार चेक किया है और इसके अंदर कोई पाइप नहीं है। तो मैं सोच रहा हूं कि समस्या क्या है। एमकेफ़िफ़ो में उपयोग करने वाला मोड या तो 0666 या 0777 है।

+0

क्या आप सही फ़ंक्शन कॉल जोड़ सकते हैं? – tomahh

+0

एरर, क्या आप नामित पाइप को एक नाम देना भूल गए? पथ निर्देशिका + '/' + फ़ाइल नाम है, इसलिए '/ home/username/दस्तावेज़/mypipe'। –

+0

char * myfifo = "/ home/username/दस्तावेज़"; mkfifo (myfifo, 0777); – SpyrosR

उत्तर

5

आपने mkfifo() को मौजूदा निर्देशिका का नाम दिया है, इस प्रकार त्रुटि। आप इसे एक गैर-मौजूद फ़ाइल का नाम देना चाहिए:

mkfifo("/home/username/Documents/myfifo", 0600); 
+0

धन्यवाद! बस इसे समझ लिया। :) – SpyrosR

2

mkfifo() करने के लिए 'पथ' तर्क एक पूर्ण पथ, निर्देशिका और फ़ाइल नाम है कि निर्दिष्ट करने के लिए है।

इस प्रकार, यह होगा:

char *myfifo="/home/username/Documents/mypipe"; 

mkfifo(myfifo, 0777); 

एक तरफ ध्यान दें के रूप में, आप चाहिए, (sys/stat.h से) के बजाय अष्टाधारी अनुमति बिट्स और स्थिरांक उपयोग नामित उपयोग करने से बचें तो:

mkfifo(myfifo, S_IRWXU | S_IRWXG | S_IRWXO); 
+0

ऑक्टल अनुमतियों में क्या गलत है? वे बेहद मानक और सार्वभौमिक हैं। – wallyk

+0

धन्यवाद मीकल !;) – SpyrosR

+1

और ऑक्टल अनुमतियां पूरी ढेर अधिक संक्षिप्त हैं! हालांकि, सिद्धांत रूप में, आप S_Iwxyz नामों का उपयोग करना चाहते हैं। अभ्यास में, आप इसके बजाय ऑक्टल का उपयोग करके लगभग हर जगह ठीक हो जाएंगे। –

0

उपयोग remove() कार्यक्रम के अंत में या कार्यक्रम की शुरुआत में फ़ाइल को निकालने के लिए, यह सुनिश्चित करने के लिए कि यह तब मौजूद नहीं है जब इसे अगली बार बनाया जाए।

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