POSIX एक fdopen फ़ंक्शन निर्दिष्ट करता है जो फ़ाइल वर्णनकर्ता के लिए FILE
बनाता है। POSIX भी fileno फ़ंक्शन निर्दिष्ट करता है जो FILE
के लिए फ़ाइल डिस्क्रिप्टर देता है।एक ही फाइल डिस्क्रिप्टर के लिए अच्छी तरह से परिभाषित के लिए दो FILEs बना रहा है?
FILE *secondfile(FILE *f, const char *mode)
{
int fd = fileno(f);
return fd >= 0 ? fdopen(fd, mode) : NULL;
}
इस POSIX के तहत एक अच्छी तरह से परिभाषित आपरेशन है: साथ में, इन दो एक दूसरे FILE
किसी मौजूदा फ़ाइल के समान ही अंतर्निहित फ़ाइल वर्णनकर्ता तक पहुँचने बनाने के लिए इस्तेमाल किया जा सकता है? क्या होता है जब मैं मूल फ़ाइल FILE
और दूसरा FILE
दोनों को उसी फ़ाइल डिस्क्रिप्टर के लिए उपयोग करता हूं? क्या बातचीत निर्दिष्ट है? यदि हां, तो कैसे?
ऐतिहासिक रूप से, यूनिसेज ने 20 फाइलों के लिए FILE
संरचनाओं की एक निश्चित तालिका का उपयोग किया था। fdopen()
को एक फ़ाइल डिस्क्रिप्टर पर कॉल करना जो पहले से ही FILE
से जुड़ा हुआ है, इस प्रकार मौजूदा फ़ाइल को दूषित कर देगा और अपरिभाषित व्यवहार उत्पन्न करेगा। मुझे यकीन नहीं है कि stdio
के इस तरह के कार्यान्वयन को अभी भी POSIX द्वारा अनुमति है, इसलिए मैं इस सवाल से पूछ रहा हूं।
मैं कल्पना नहीं कर सकता कि यह काम करेगा। –
मुझे संदेह होगा कि यह * अच्छी तरह से परिभाषित नहीं है, क्योंकि आईओ ऑपरेशंस के परिणाम अंतर्निहित फ़ाइल डिस्क्रिप्टर के (साझा) ऑफसेट के साथ 'फ़ाइल' संरचना में डेटा की बातचीत पर निर्भर होंगे। –
@ थॉमसपैड्रॉन-मैककार्थी मैं भी नहीं कर सकता, लेकिन मुझे इस परिदृश्य से संबंधित पॉसिक्स में भाषा नहीं मिली है और दूसरी भाषा का सुझाव है कि यह अच्छी तरह से परिभाषित है, इसलिए मैं पूछ रहा हूं। – fuz