का उपयोग करके फ़ाइल अभी भी मौजूद है या नहीं, मेरे पास फ़ाइल डिस्क्रिप्टर है जो एक खुले() फ़ंक्शन के परिणामस्वरूप सकारात्मक मान पर सेट है, इसलिए यह fd फ़ाइल को इंगित कर रहा है। जब मैं वास्तविक फ़ाइल fd को हटाता हूं तब भी एक सकारात्मक पूर्णांक होता है। मैं जानना चाहता हूं कि अगर मैं किसी कारण से फ़ाइल हटा देता हूं, तो मुझे कैसे पता चलेगा कि यह फ़ाइल डिस्क्रिप्टर अब मान्य नहीं है। संक्षेप में, मैं कैसे जान सकता हूं कि फ़ाइल जो एफडी इंगित कर रही है, अभी भी वहां है या नहीं। मैं इसे फ्रीबीएसडी पर सी में करने की कोशिश कर रहा हूं।फ़ाइल डिस्क्रिप्टर
उत्तर
यूनिक्स सिस्टम आपको खुली फ़ाइलों को हटाने देता है (या, फाइल सिस्टम से फ़ाइल के सभी संदर्भ हटाएं)। लेकिन फाइल डिस्क्रिप्टर अभी भी मान्य है। कोई भी पढ़ना और लिखना कॉल सफल होगा, क्योंकि वे अभी भी फ़ाइल नाम के साथ होंगे।
दूसरे शब्दों में, फ़ाइल फ़ाइल डिस्क्रिप्टर बंद होने तक आप फ़ाइल को पूरी तरह से हटा नहीं सकते हैं। एक बार बंद हो जाने पर, फ़ाइल को स्वचालित रूप से हटा दिया जाएगा।
एक वैध फ़ाइल डिस्क्रिप्टर के साथ, आप जांच सकते हैं कि फ़ाइल नाम अभी भी मौजूद है या नहीं।
printf("%d\n", buf.st_nlink); // 0 means no filenames
कहाँ buf
एक struct stat
fstat
साथ initialised है।
सलाह के लिए धन्यवाद लेकिन यह एक अलग स्थिति है जिसका सामना कर रहा हूं। मुझे बस यह जांचने की ज़रूरत है कि फ़ाइल जो एफडी इंगित करती है या नहीं। यदि नहीं तो एफडी के माध्यम से सीखने का तरीका क्या है? –
@ हसनबोजोक - आप हार्ड लिंक की संख्या प्राप्त करने के लिए वैध फ़ाइल डिस्क्रिप्टर पर 'fstat' का उपयोग कर सकते हैं। यदि यह 0 है, तो फ़ाइल नाम हटा दिया गया है। – teppic
@teppic, क्या कोई तरीका है ['ioctl'] (http://pubs.opengroup.org/onlinepubs/009696699/functions/ioctl.html) वास्तव में फ़ाइल को हटाने के लिए उपयोग किया जा सकता है? यदि यह संभव था, तो क्या यह खतरनाक होगा? –
फाइल करने के लिए लिखने से पहले आप अगर यह अभी भी वहाँ access()
if (access("/yourfile",W_OK)!=-1) {
//Write on the file
}
तुम भी वर्णनकर्ता पर fstat कर सकते हैं उपयोग कर रहा है जांच कर सकता है:
struct stat statbuf;
fstat(fd,&statbuf);
if (statbuf.st_nlink > 0) {
//File still exists
}
लेकिन यह एक अपने सॉफ्टवेयर धीमी हो जाएगी बहुत कुछ, और कुछ प्रोग्राम फ़ाइल को कहीं और लिंक कर सकते हैं और मूल नाम को अनलिंक कर सकते हैं, ताकि फ़ाइल अभी भी मौजूद हो लेकिन एक अलग नाम/स्थान के तहत, और यह विधि इसका पता नहीं लगाएगी।
जीएनयू/लिनक्स पर inotify
या बीएसडी पर क्यूक्यू का उपयोग करने के लिए एक बेहतर विकल्प होगा, लेकिन मैंने कभी दूसरा उपयोग नहीं किया है।
आप निर्देशिकाओं में परिवर्तन देखने और कर्नेल से सूचनाएं प्राप्त करने के लिए इन API का उपयोग कर सकते हैं और किसी अन्य प्रक्रिया द्वारा आपकी फ़ाइल को हटाए जाने पर एक ईवेंट प्राप्त कर सकते हैं, और इसके बारे में कुछ कर सकते हैं।
ध्यान रखें कि यह घटनाएं वास्तविक समय में नहीं हैं, इसलिए आप ईवेंट प्राप्त करने से पहले कुछ मिलीसेकंड के लिए फ़ाइल का उपयोग कर सकते हैं।
- 1. सॉकेट डिस्क्रिप्टर बनाम फ़ाइल डिस्क्रिप्टर
- 2. फ़ाइल डिस्क्रिप्टर
- 3. बैश: फ़ाइल डिस्क्रिप्टर
- 4. सॉकेट और फ़ाइल डिस्क्रिप्टर
- 5. अंतर्निहित फ़ाइल डिस्क्रिप्टर
- 6. दो फ़ाइल डिस्क्रिप्टर
- 7. थ्रेड और फ़ाइल डिस्क्रिप्टर
- 8. लॉगस्टैश बंद फ़ाइल डिस्क्रिप्टर?
- 9. फ़ाइल डिस्क्रिप्टर रिसाव। (CXF, एसएसएल)
- 10. fdopen बुला: खराब फ़ाइल डिस्क्रिप्टर
- 11. सी सभी खुली फ़ाइल डिस्क्रिप्टर
- 12. फ़ाइल डिस्क्रिप्टर से नाम बदलें?
- 13. डुप्लिकेट फ़ाइल डिस्क्रिप्टर अपनी फ़ाइल ऑफ़सेट
- 14. दो फ़ाइल डिस्क्रिप्टर एक ही फ़ाइल में
- 15. फ़ाइल फ़ाइल डिस्क्रिप्टर से फ़ाइल फ़ाइल निकालें या FILE *
- 16. पैरेंट खोल में इनपुट फ़ाइल डिस्क्रिप्टर को सबहेल के आउटपुट फ़ाइल डिस्क्रिप्टर को रीडायरेक्ट कैसे करें?
- 17. बैश डबल प्रोसेस प्रतिस्थापन खराब फ़ाइल डिस्क्रिप्टर
- 18. क्या फॉपेन फ़ाइल डिस्क्रिप्टर बनाता है?
- 19. फाइल डिस्क्रिप्टर
- 20. एक ही फ़ाइल में एकाधिक फ़ाइल डिस्क्रिप्टर, सी
- 21. getline() फ़ाइल सूचक के बजाय फ़ाइल डिस्क्रिप्टर के साथ
- 22. फ़ाइल डिस्क्रिप्टर और फ़ाइल पॉइंटर के बीच क्या अंतर है?
- 23. आर्टिफैक्ट डिस्क्रिप्टर अपवाद: आर्टिफैक्ट डिस्क्रिप्टर मेवेन त्रुटि
- 24. पायथन डिस्क्रिप्टर
- 25. निर्भरता डिस्क्रिप्टर
- 26. एमबीसीसी फीचर डिस्क्रिप्टर लिब्रोस
- 27. पायथन क्लोज़ फाइल डिस्क्रिप्टर प्रश्न
- 28. ओ (1) ओपन फाइल डिस्क्रिप्टर
- 29. यूनिक्स डोमेन सॉकेट पर फ़ाइल डिस्क्रिप्टर भेजना, और चुनें()
- 30. पाइथन में फ़ाइल डिस्क्रिप्टर को मूल न्यूलाइन वर्ण कैसे लिखें?
फ़ाइल लिखने या पढ़ने का प्रयास करें। उसे एक त्रुटि वापस करनी चाहिए। – RedX
@RedX यह नहीं है कि यूनिक्स कैसे काम करता है। – LtWorf
हां, मुझे पता है कि मुझे उस फ़ाइल को पढ़ना या खोलना है, लेकिन क्या सिर्फ एफडी के साथ फाइल खोलने या पढ़ने का कोई तरीका है? क्या सिर्फ एफडी, कोई पथ या फ़ाइल * –