fopen

2010-12-20 10 views
7

वापस नहीं लौटाता है मैंने रीडोनली मोड (आर) में एक फ़ाइल खोलने के लिए एक सी प्रोग्राम में 'fopen' का उपयोग किया था। लेकिन मेरे मामले में मैंने देखा कि फॉपेन कॉल वापस नहीं आती है। यह पूर्ण या मान्य सूचक नहीं लौटाता है - निष्पादन को फॉपेन कॉल पर अवरुद्ध कर दिया जाता है। फ़ाइल का पैच बिल्कुल सही है (मैंने पहले ही इसे सत्यापित कर लिया है) और कोई अनुमति संबंधित समस्या नहीं है। क्या कोई यह बता सकता है कि व्यवहार के दौरान इस तरह का कारण क्या हो सकता है। किसी भी तरह की मदद वास्तव में सराहनीय है। क्या जीसीसी या ग्लिब से संबंधित कुछ भी है?fopen

संपादित

यहाँ नमूना कोड

printf("%s %d\n",__FUNCTION__,__LINE__); 
if ((fp = fopen(argv[1], "r")) == NULL) { 
    printf("%s %d\n",__FUNCTION__,__LINE__); 
    return; 
} 
printf("%s %d\n",__FUNCTION__,__LINE__); 

मुझे इस कोड चलाने के लिए, मैं केवल (fopen कॉल करने से पहले) पहले प्रिंट हो और उस प्रोग्राम बस रुकती के बाद है। तो fopen यह ऑपरेशन पूरा नहीं करता है। फ़ाइल '.conf' एक्सटेंशन के साथ एक सरल कॉन्फ़िगरेशन फ़ाइल है और यह फ़ाइल vi, cat आदि जैसे अन्य सभी माध्यमों से खोली जा सकती है। कोई भी एनएफएस संबंधित समस्या नहीं होनी चाहिए। फाइल सिस्टम ext3 है।

अग्रिम धन्यवाद, सौविक

+5

पोस्ट कोड के साथ एक चरित्र/ब्लॉक विशेष फ़ाइल है। हम इसके बिना नहीं बता सकते हैं। पैरामीटर (मानों के साथ) को शामिल करें जो आप फॉपेन में जा रहे हैं। –

+0

यदि आप यूआर कोड पोस्ट नहीं कर सकते हैं तो परिदृश्य में एक नमूना कोड पोस्ट करें! – Sudantha

+0

कृपया फाइल सिस्टम के प्रकार को भी निर्दिष्ट करें। – Simone

उत्तर

2

तो क्या हुआ? फ़ाइल को तब तक अवरुद्ध करने की अनुमति दी जाती है जब तक फ़ाइल खोला नहीं जाता है, या जब तक यह निर्धारित नहीं किया जाता है कि पहुंच अस्वीकार कर दी गई है। यदि आपके पास धीमी स्टोरेज डिवाइस है, तो यह उपलब्ध होने तक प्रतीक्षा करने के लिए बिल्कुल सही है। लेकिन यह एक ऑपरेटिंग सिस्टम मुद्दा है, सी नहीं।

1

मुझे लगता है कि यदि आप इसे सफलतापूर्वक खोलते हैं तो आप फ़ाइल को बंद नहीं करते हैं।

क्या यह संभव है कि आपने इसे पहले चलाया और मार डाला हो, और अब आपके पास एक प्रक्रिया है जिसमें फाइल खुली है, और बंद है?

यदि ऐसा है, तो शायद लॉक लॉक होने की प्रतीक्षा कर रहा है।

+2

एक दिलचस्प विचार है, लेकिन मुझे वहां कोई लॉकिंग कोड नहीं दिख रहा है। यहां तक ​​कि विंडोज रीडोनली मोड में कई प्रक्रियाओं द्वारा फ़ाइलों को खोलने की अनुमति देगा। इस सवाल को लिनक्स टैग किया गया है, और लिनक्स इस अर्थ में और भी क्षमा कर रहा है। और इसके अलावा, वह कह रहा है कि अन्य कार्यक्रम उस फ़ाइल को खोल सकते हैं। –

+1

कुछ हद तक संबंधित: यह संभव है कि कुछ मेमोरी भ्रष्टाचार ने खुले फ़ाइल सूची लॉक पर म्यूटेक्स पर लिखा है, जिससे 'fopen' हमेशा' pthread_mutex_lock' या समकक्ष में लटका हुआ है। यदि ओपी हमारे किसी भी उत्तर को सुनता है और केवल 'स्ट्रेस' चलाता है, तो इसे तुरंत पुष्टि या अस्वीकार कर दिया जा सकता है। –

+0

@ आर ..: यह एक बहुत अच्छा अवलोकन है। –

-1

क्या यह संभव है कि आपने आरक्षित नेमस्पेस में एक प्रतीक को फिर से परिभाषित किया हो: या तो दो अंडरस्कोर, अंडरस्कोर और कैपिटल लेटर, या किसी भी मानक सी लाइब्रेरी फ़ंक्शंस से शुरू हो रहा है? यदि ऐसा है, तो इसका परिणाम अपरिभाषित व्यवहार में होता है, और यह संभव है कि fopen किसी भी तरह से मानक लाइब्रेरी में सही कोड के बजाय आपके कोड का हिस्सा कॉल करना समाप्त हो जाता है।

इस प्रश्न में एक प्रमुख "गायब जानकारी" गंध है। मुझे गंभीरता से संदेह है कि प्रश्न में कोड स्निपेट में व्यवहार ओपी ने वर्णित किया है जब यह main में स्वयं दिखाई देता है, और मुझे आश्चर्य है कि क्या ओपी ने कुछ फर्जी सामान नहीं किए हैं, वह हमें नहीं बता रहा है ...

+0

एक टिप्पणी होना चाहिए। – Stargateur

5

यहां कुछ हैं कारण:

  • आप स्मृति कहीं भ्रष्ट है, और सभी दांव क्या (valgrind के माध्यम से अपने कार्यक्रम चलाने)
  • आप fopen (एक संकेत हैंडलर के अंदर इस कोड को कॉल कर रहे हैं,) नहीं है हो रहा के रूप में करने के लिए बंद कर रहे हैं सिग्नल एसिंक सुरक्षित है, तो वास्तव में कुछ भी हो सकता है (FILE * आंतरिक म्यूटेक्स के कारण एक डेडलॉक सामान्य है)
  • फ़ाइल fifo है, जिसमें फ़ाइल खोलने के मामले तब तक अवरुद्ध हो जाएंगे जब तक कोई व्यक्ति दूसरी छोर पर फ़ाइल खोलता है (पढ़ना/लिखना)
  • फ़ाइल एक पुराने एनएफएस माउंट पर है।
  • फ़ाइल अर्थ विज्ञान है कि ब्लॉक खोलने जब तक कुछ दिलचस्प होता है,
+0

किसी अन्य पीसी पर एक ही कोड का प्रयास किया और यह ठीक काम किया। यकीन नहीं है कि मेरे पीसी के साथ क्या गलत हुआ। वैसे भी, सभी मदद और सुझाव के लिए बहुत बहुत धन्यवाद। – Souvik

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