c - हरण - लिनक्स के फायदे
लिनक्स में उपयोग करने के लिए आपको एक टेम्पके फ़ाइल का नाम कैसे मिलता है? (4)
@garethm:
मेरा मानना है कि जिस कार्य के लिए आप खोज रहे हैं उसे टाम्पनाम कहा जाता है
आप निश्चित रूप से tmpnam
उपयोग नहीं करना चाहिए यह मेरे उत्तर में रेस हालत की समस्या से ग्रस्त है: नाम का निर्धारण करने और इसे खोलने के बीच, एक और प्रोग्राम फाइल को या एक सिमलिंक बना सकता है, जो एक बड़ी सुरक्षा छेद है।
tmpnam
man पृष्ठ विशेष रूप से इसका उपयोग नहीं करता है, बल्कि इसके बजाय mkstemp
या tmpfile
का उपयोग करने के लिए mkstemp
।
मान लीजिए कि मैं सी में एक प्रोग्राम का निर्माण कर रहा हूं जिसे एक टेम्पफाइल का उपयोग करने की आवश्यकता है / Tmp में एक तदर्थ tempfile बनाना शायद एक अच्छा विचार नहीं है क्या कोई फ़ंक्शंस या ओएस कॉल मुझे टेम्पफाइल नाम के साथ आपूर्ति करता है ताकि मैं इसे लिखना और पढ़ना शुरू कर सकूं?
आप इस उद्देश्य के लिए mkstemp(3)
फ़ंक्शन का उपयोग कर सकते हैं एक अन्य विकल्प है tmpfile(3)
फ़ंक्शन। उनमें से कौन सा आप चुनते हैं, इस पर निर्भर करता है कि क्या आप फ़ाइल को सी लाइब्रेरी फ़ाइल स्ट्रीम (जो कि tmpfile
करता है) या एक प्रत्यक्ष फाइल डिस्क्रिप्टर ( mkstemp
) के रूप में mkstemp
। प्रोग्राम समाप्त होने पर भी tmpfile
फ़ंक्शन स्वचालित रूप से फाइल को tmpfile
इन फ़ंक्शन का उपयोग करने का लाभ यह है कि वे अद्वितीय फाइल नाम का निर्धारण करने और फ़ाइल बनाने के बीच दौड़ की स्थिति से बचें - ताकि दो प्रोग्राम एक ही फाइल को एक ही समय में बनाने का प्रयास न करें, उदाहरण के लिए
अधिक विवरणों के लिए दोनों कार्यों के लिए मैन पेज देखें।
सवाल यह है कि कैसे एक अस्थायी फ़ाइल नाम उत्पन्न करने के लिए न तो mkstemp और न ही tmpfile एक कॉलर को एक नाम के साथ प्रदान करता है, वे क्रमशः एक फाइल डिस्क्रिप्टर या फ़ाइल हैंडल लौटाते हैं।