2009-02-12 2 views
12

मैं केवल निर्देशिका नाम प्राप्त करने के लिए tempnam() का उपयोग कर रहा हूं, इसलिए यह सुरक्षा चेतावनी मेरे मामले पर लागू नहीं होती है। मैं इसे कैसे अक्षम कर सकता हूं? मुझे ऐसा करने के लिए कोई स्विच नहीं मिला।'tempnam' को अक्षम करने का कोई भी तरीका खतरनाक है, बेहतर 'mkstemp' gcc चेतावनी का उपयोग करें?

उत्तर

6

यदि आप वास्तव में केवल निर्देशिका नाम चाहते हैं, तो <stdio.h> में परिभाषित स्ट्रिंग निरंतर मैक्रो P_tmpdir का उपयोग करें।

-3

आप इस तरह की सभी चेतावनियों को अक्षम करने के लिए जीसीसी के -Wno-deprecated-declarations विकल्प का उपयोग कर सकते हैं। मेरा सुझाव है कि आप चेतावनी को सही तरीके से संभाल लें, और संकलक का सुझाव लें।

+4

मेरे लिए, यह इस प्रकार की चेतावनी को चुप नहीं करता है। – Jack

+1

मेरे लिए यह भी चुप नहीं हुआ, – FabioCosta

+5

के साथ भी नहीं, यह लिंकिंग में उत्पादित एक चेतावनी है, चरण संकलित नहीं, इसलिए इस चेतावनी का कोई प्रभाव नहीं पड़ता है। (इसे लिंक चरण में देना भी काम नहीं करता है)। (जी ++ 4.8.2 में, कम से कम) –

0

"tempnam() फ़ंक्शन एक स्ट्रिंग पर एक पॉइंटर देता है जो वैध फ़ाइल नाम है, और इस प्रकार टेम्पनाम() चेक किए जाने पर इस नाम वाली फ़ाइल मौजूद नहीं थी।"

चेतावनी और फ़ाइल के बाद के निर्माण के बीच दौड़ की स्थिति के कारण चेतावनी उत्पन्न होती है।

आप केवल निर्देशिका नाम प्राप्त करना चाहते हैं? इसके लिए क्या अच्छा होना चाहिए?

अजनबी की तरह पहले से ही कहा गया है, आप -नो-बहिष्कृत-घोषणाओं का उपयोग करके इस (और इसी तरह की चेतावनियों) को अक्षम कर सकते हैं।

+0

मुझे एक अस्थायी निर्देशिका में एक फीफो फ़ाइल बनाने की आवश्यकता है, इसलिए मैं dirname (tempnam ...) का उपयोग करता हूं – jackhab

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