2008-10-01 12 views
11

सी ++ में, लिनक्स पर, मैं एक अस्थायी फ़ाइल नाम वापस करने के लिए एक फ़ंक्शन कैसे लिख सकता हूं जिसे मैं लिखने के लिए खोल सकता हूं?मैं लिनक्स प्लेटफॉर्म पर सी ++ में लिखने के लिए एक अस्थायी फ़ाइल कैसे बना सकता हूं?

फ़ाइल नाम जितना संभव हो उतना अद्वितीय होना चाहिए, ताकि एक ही कार्य का उपयोग करने वाली दूसरी प्रक्रिया एक ही नाम न हो।

उत्तर

17

मानक पुस्तकालय "mktemp" कार्यों में से एक का उपयोग करें: mktemp/mkstemp/mkstemps/mkdtemp।

संपादित करें: सादा mktemp असुरक्षित हो सकता है - mkstemp को प्राथमिकता दी जाती है।

+2

ये पहले से ही खुली फ़ाइल हैंडल लौटाते हैं, जो सी ++ की आईओ धाराओं के साथ मिश्रण नहीं करता है। अगर आपको इस नई फाइल को लिखने के लिए std :: wofstream का उपयोग करने के लिए, उदाहरण के लिए क्या चाहिए? – Andrey

-2

आपको बस यह जांचना चाहिए कि आप जिस फ़ाइल को लिखने की कोशिश कर रहे हैं वह पहले से मौजूद है या नहीं। यह एक लॉकिंग समस्या है। फ़ाइलों में मालिक भी हैं इसलिए यदि आप इसे कर रहे हैं तो गलत प्रक्रिया इसे लिखने में सक्षम नहीं होगी।

0

आदमी tmpfile

tmpfile() फ़ंक्शन द्विआधारी पढ़ें/लिखें में एक अद्वितीय अस्थायी फ़ाइल (w + ख) मोड को खोलता है। जब यह बंद कर दिया है फ़ाइल स्वचालित रूप से हटा दिया जाएगा या कार्यक्रम

6

tmpnam (terminates.ote), या कुछ भी है कि आप एक नाम देता है स्थिति दौड़ की चपेट में होने जा रहा है। इस तरह के tmpfile के रूप में() इस उद्देश्य है कि एक संभाल रिटर्न के लिए बनाया गया कुछ का उपयोग करें:

#include <stdio.h> 

    FILE *tmpfile(void); 
0

mktemp काम वरना उपलब्ध पुस्तकालयों के बहुत से एक मिल एक UUID उत्पन्न करने के लिए करना चाहिए।

0

सी मानक पुस्तकालय में tmpnam() फ़ंक्शन को इस समस्या को हल करने के लिए डिज़ाइन किया गया है। Tmpfile() भी है, जो एक खुली फ़ाइल हैंडल देता है (और जब आप इसे बंद करते हैं तो इसे स्वचालित रूप से हटा देता है)।

+0

tmpnam() का उपयोग न करें। मैन पेज से: "इस फ़ंक्शन का कभी भी उपयोग न करें। इसके बजाय mkstemp (3) या tmpfile (3) का उपयोग करें।" – twk

+0

ओह। मैं सवाल के "लिनक्स" हिस्से पर ध्यान नहीं दे रहा था। mkstemp() शायद सही समाधान है, अगर आपको पोर्टेबिलिटी की आवश्यकता नहीं है। –

2

जीएनयू libc पुस्तिका उपलब्ध विभिन्न विकल्पों पर चर्चा करता है और उनके चेतावनियां:

http://www.gnu.org/s/libc/manual/html_node/Temporary-Files.html

लंबी कहानी संक्षेप में, केवल mkstemp() या tmpfile(), इस्तेमाल किया जाना चाहिए के रूप में दूसरों का उल्लेख किया है।

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

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