2011-05-23 13 views
12

बस एक त्वरित प्रश्न: क्या फ़ाइल सूचक (fopen() द्वारा लौटाए गए) को डुप्लिकेट करने का कोई तरीका है, dup()open() जैसे फ़ंक्शंस द्वारा लौटाए गए फ़ाइल हैंडलर को डुप्लिकेट करता है?फाइल पॉइंटर्स डुप्लिकेट करना?

मूल रूप से, मैं इस तरह कुछ करने के लिए सक्षम होना चाहते हैं:

FILE *fp = fopen("some_file", "r"); 
FILE *fp2 = /* do something to duplicate the file pointer */; 
fclose(fp); // fp2 is still open 
/* do something with fp2 */ 
fclose(fp2); 

उत्तर

10

आप fileno का प्रयोग कर एक FILE* की जानकारी देता प्राप्त करने के लिए कर सकता है, dup कि, और फिर fdopen का उपयोग एक नया FILE* से प्राप्त करने के लिए नया वर्णनकर्ता

+0

यह एक अच्छा समाधान की तरह लगता है, धन्यवाद: डी – Frxstrem

13
FILE *fp2 = fdopen (dup (fileno (fp)), "r"); 
+0

+1, एक बदसूरत बतख का बच्चा स्निपेट के बारे में बात करते हैं :) – user7116

+2

कुछ त्रुटि हैंडलिंग जोड़ना चाहिए। :-) –

1

मैंने एक ही फाइल को दो बार खोला और दो पॉइंटर्स आवंटित किए और अंत में दोनों अलग-अलग बंद हो गए। मेरे मामले में मुझे एक पॉइंटर का उपयोग करके टेक्स्ट विंडो में सामग्री दिखाना था और अन्य पॉइंटर का उपयोग कर डेटा में डेटा को संसाधित करना था। उदा।

//define global variables 

FILE *fp1 = fopen("some_file", "r"); 

//fp1 used in functioncall to display textbuffer 

fclose(fp1); 

//fp2 used in functioncall to process data 

fclose(fp2); 
संबंधित मुद्दे