ठीक है, mkstemp
POSIX में एक temp फ़ाइल बनाने का पसंदीदा तरीका है।एक temp फ़ाइल में std :: ofstream कैसे बनाएं?
लेकिन यह फ़ाइल खोलता है और int
देता है, जो एक फ़ाइल वर्णनकर्ता है। उस से मैं केवल एक फ़ाइल बना सकता हूं, लेकिन std::ofstream
नहीं, जिसे मैं सी ++ में पसंद करूंगा।
(जाहिर है, AIX और कुछ अन्य सिस्टम पर, आप एक std::ofstream
एक फ़ाइल वर्णनकर्ता से बना सकते हैं, लेकिन मेरे संकलक की शिकायत जब मुझे लगता है कि कोशिश करते हैं।) मैं जानता हूँ कि मैं tmpnam
के साथ एक अस्थायी फ़ाइल नाम मिल सकता है और उसके बाद अपने ही खोल इसके साथ ofstream, लेकिन वह दौड़ की स्थिति के कारण जाहिरा तौर पर असुरक्षित है, और चेतावनी एक संकलक में परिणाम (छ ++ v3.4 लिनक्स पर।):
warning: the use of `tmpnam' is dangerous, better use `mkstemp'
तो, वहाँ किसी भी पोर्टेबल तरह से एक अस्थायी के लिए एक std::ofstream
बनाने के लिए है फाइल?
यह लिनक्स पर मेरे जी ++ v3.4.4 के साथ संकलित नहीं है। जाहिर है केवल कुछ प्लेटफार्मों में यह कार्य है। – Frank
धन्यवाद! आपकी दूसरी विधि के लिए (mkstemp और फिर ऑफस्ट्रीम का उपयोग करके): क्या यह अभी भी I/O के संदर्भ में कुशल है? वह फाइल सिस्टम को दो बार एक्सेस करेगा, है ना? हमारी फाइल सिस्टम बहुत धीमी है और मुझे चिंता है कि यह उस पर एक अनावश्यक बोझ डालेगा। – Frank
strdup पोर्टेबल नहीं है, या तो ... – Sol