मान लें कि मैं सी में एक प्रोग्राम बना रहा हूं जिसे एक टेम्पफाइल का उपयोग करने की आवश्यकता है।/Tmp में विज्ञापन tempfile बनाना संभवतः एक अच्छा विचार नहीं है। क्या मुझे टेम्पफाइल नाम के साथ आपूर्ति करने के लिए कोई फ़ंक्शन या ओएस कॉल है ताकि मैं इसे लिखना और पढ़ना शुरू कर सकूं?लिनक्स में उपयोग करने के लिए आपको टेम्पफाइल का फ़ाइल नाम कैसे मिलता है?
उत्तर
आप इस उद्देश्य के लिए mkstemp(3)
फ़ंक्शन का उपयोग कर सकते हैं। एक और विकल्प tmpfile(3)
समारोह है। उनमें से कौन सा आप चुनते हैं इस पर निर्भर करता है कि क्या आप फ़ाइल को सी लाइब्रेरी फ़ाइल स्ट्रीम (जो tmpfile
करता है) के रूप में खोला जाना चाहते हैं, या एक प्रत्यक्ष फ़ाइल डिस्क्रिप्टर (mkstemp
)। जब आप प्रोग्राम समाप्त करते हैं तो tmpfile
फ़ंक्शन स्वचालित रूप से फ़ाइल को हटा देता है।
इन कार्यों का उपयोग करने का लाभ यह है कि वे अद्वितीय फ़ाइल नाम निर्धारित करने और फ़ाइल बनाने के बीच दौड़ की स्थिति से बचते हैं - ताकि दो प्रोग्राम एक ही समय में एक ही फाइल बनाने की कोशिश नहीं करेंगे।
अधिक जानकारी के लिए दोनों कार्यों के लिए मैन पेज देखें।
बिल्कुल: मैन mkstemp।
मैन पेज का उदाहरण उपयोग है।
सी lib में कुछ भी के बारे में निश्चित नहीं है, लेकिन आप इसे mktemp के साथ खोल में कर सकते हैं।
@garethm:
मुझे विश्वास है कि समारोह आप देख रहे हैं tmpnam कहा जाता है।
आप निश्चित रूप से नहीं उपयोग tmpnam
चाहिए। यह मेरे उत्तर में वर्णित दौड़ की स्थिति की समस्या से पीड़ित है: नाम निर्धारित करने और इसे खोलने के बीच, कोई अन्य प्रोग्राम फ़ाइल या सिमलिंक बना सकता है, जो एक विशाल सुरक्षा छेद है।
tmpnam
मैन पेज विशेष रूप से इसका उपयोग नहीं करने के लिए कहता है, लेकिन इसके बजाय mkstemp
या tmpfile
का उपयोग करने के लिए।
प्रश्न यह है कि एक अस्थायी फ़ाइल नाम कैसे उत्पन्न करें। न तो mkstemp और न ही tmpfile कॉलर को नाम के साथ प्रदान करते हैं, वे क्रमशः फ़ाइल डिस्क्रिप्टर या फ़ाइल हैंडल लौटाते हैं।
आप सही हैं, मार्क, सवाल एक अस्थायी फ़ाइल नाम के लिए पूछता है। लेकिन सवाल गलत है। प्रश्नकर्ता वास्तव में एक अस्थायी फ़ाइल नाम नहीं चाहता है, वह वास्तव में एक अस्थायी फ़ाइल चाहता है। –
फिर प्रश्न बदलना चाहिए। –
सत्य नहीं है: mkstemp * करता है * कॉलर को एक नाम के साथ प्रदान करता है, क्योंकि यह दिए गए टेम्पलेट को संशोधित करता है। कॉलर को एक टेम्पलेट प्रदान करने की आवश्यकता है, लेकिन यह एक अस्थायी निर्देशिका (जैसे $ TMPDIR, P_tmpdir, या "/ tmp") और एक उपसर्ग चुनने का एक अपेक्षाकृत सरल मामला है, इसके बाद छह एक्स है। –
के रूप में इस सिफारिश समारोह है आप mkstemp() का उपयोग करना चाहिए, लेकिन यह एक फ़ाइल वर्णनकर्ता देता है, तो एक बार आप वर्णनकर्ता है यह नाम है मिलती है:
int fd;
fd = mkstemp("hdrXXXXXX);
/* Read out the link to our file descriptor. */
sprintf(path, "/proc/self/fd/%d", fd);
memset(result, 0, sizeof(result));
readlink(path, result, sizeof(result)-1);
/* Print the result. */
printf("%s\n", result);
कृपया यह [URL] chekc (http://stackoverflow.com/help) यह आपकी सामग्री की गुणवत्ता को बढ़ाने के लिए उपयोगी होगा –
- 1. एसएसएल 2.0 का उपयोग करने के लिए आपको System.Web.HttpWebRequest ऑब्जेक्ट कैसे मिलता है?
- 2. आपको सी # संपत्ति का नाम प्रतिबिंब के साथ स्ट्रिंग के रूप में कैसे मिलता है?
- 3. मार्कडाउन में प्रदर्शित करने के लिए आपको डबल-अंडरस्कोर कैसे मिलता है?
- 4. जहां पेपरक्लिप से मूल फ़ाइल का नाम मिलता है?
- 5. एएसपी.नेट में अनुरोध से आपको आईपी पता कैसे मिलता है?
- 6. VisualSVN सर्वर के साथ काम करने के लिए आपको AnkhSVN कैसे मिलता है?
- 7. फ़्लोटिंग-पॉइंट अनुक्रम में आपको अगला मान कैसे मिलता है?
- 8. PHP में, class_alias का उपयोग करते समय आपको अलियोजित वर्ग कैसे मिलता है?
- 9. रूबी के साथ आपको न्यूनतम/अधिकतम कैसे मिलता है?
- 10. आपको javac चेतावनियों को मुद्रित करने के लिए * ant * कैसे मिलता है?
- 11. सी ++ का उपयोग कर लिनक्स में फ़ाइल के मालिक का नाम कैसे प्राप्त करें?
- 12. एएसपी.नेट में जब आप एचटीपीसीएन्टेक्स्ट.क्यूरेंट न्यूल होते हैं तो आपको भौतिक फ़ाइल पथ कैसे मिलता है?
- 13. आपको अपने प्रोग्रामिंग कौशल में सुधार के लिए समय कैसे मिलता है?
- 14. रूबी का उपयोग करके आपको एक मुफ्त टीसीपी सर्वर पोर्ट कैसे मिलता है?
- 15. क्या कोई अवैध लिनक्स फ़ाइल नाम है?
- 16. लिनक्स में धागे का नाम कैसे लगाएं?
- 17. jsp में संपत्ति फ़ाइल का उपयोग करने के लिए कैसे
- 18. लिनक्स में फ़ाइल नाम बदलने की तिथि
- 19. एक्सएएमएल परिवर्तनों को पहचानने के लिए आपको विजुअल स्टूडियो कैसे मिलता है?
- 20. विजुअल स्टूडियो में अच्छी तरह प्रारूपित करने के लिए आपको सर्वर ब्लॉक <% %> कैसे मिलता है?
- 21. फ़ोल्डर नाम का उपयोग करने के बजाय प्रोजेक्ट का नाम बदलने के लिए कैसे करें?
- 22. दृश्य स्टूडियो 2008 एक्सप्रेस में संकलित और लिंक करने के लिए आपको न्यूनतम एसडीएल प्रोग्राम कैसे मिलता है?
- 23. फ़ाइल को दूसरी फ़ाइल में कॉपी करने के लिए मैं लिनक्स के स्प्लिस() फ़ंक्शन का उपयोग कैसे कर सकता हूं?
- 24. फ़ाइल डाउनलोड करने के लिए HttpWebRequest का उपयोग कैसे करें
- 25. सत्र वर्ग का उपयोग करने के लिए आपको अपनी कॉन्फ़िगरेशन फ़ाइल
- 26. मुझे सभी एंड्रॉइड एप्लिकेशन श्रेणियों का नाम कैसे मिलता है?
- 27. जॉब्जेक्ट का उपयोग करने के लिए पुस्तकालय नाम क्या है?
- 28. फ़ाइल पथ नाम से फ़ाइल नाम निकालने के लिए कैसे?
- 29. कहाँ xcode 4 फ़ाइल टेम्पलेट्स के लिए उपयोगकर्ता नाम मिलता है
- 30. लिनक्स में ls कमांड द्वारा फ़ोल्डर/फ़ाइल नाम प्रदर्शित करने के लिए कौन सी लिनक्स सिस्टम कॉल का उपयोग किया जाता है?
mkstemp सिर्फ एक फ़ाइल वर्णनकर्ता एक पर खुला रिटर्न नई फाइल लेकिन आप इसे अंतिम नाम भी प्राप्त कर सकते हैं क्योंकि mkstemp टेम्पलेट के XXXXXX वर्णों को प्रतिस्थापित करता है। – Angel