मैं असेंबली (नासम का उपयोग करके) में शुरुआत कर रहा हूं। मैं एक कॉलेज कोर्स के माध्यम से असेंबली सीख रहा हूँ।sys_read सिस्टम कॉल क्यों समाप्त होता है जब यह एक नई रेखा का पता लगाता है?
मैं इसे लागू होने पर sys_read linux सिस्टम कॉल के व्यवहार को समझने की कोशिश कर रहा हूं। विशेष रूप से, sys_read रोकता है जब यह एक नई लाइन या लाइन फ़ीड पढ़ता है। जो मैंने सिखाया है उसके मुताबिक, यह सच है। यह online tutorial article भी तथ्य/दावा की पुष्टि करता है।
जब sys_read एक लाइनफीड का पता लगाता है, तो नियंत्रण प्रोग्राम पर वापस आता है और उपयोगकर्ता इनपुट ईसीएक्स में आपके द्वारा पारित स्मृति पते पर स्थित होता है।
मैंने sys_read कॉल के लिए लिनक्स प्रोग्रामर के मैनुअल की जांच की ("मैन 2 रीड" के माध्यम से)। यह व्यवहार का जिक्र नहीं करता है जब यह माना जाता है, है ना?
पढ़ें() फ़ाइल डिस्क्रिप्टर एफडी से बाइट पर शुरू होने वाले बफर में गिनती गिनने के लिए पढ़ने का प्रयास करता है।
मांग करने वाली फ़ाइलों पर, पढ़ने का ऑपरेशन फ़ाइल ऑफसेट पर शुरू होता है, और फ़ाइल ऑफसेट बाइट्स की संख्या से बढ़ता है। अगर फ़ाइल ऑफ़सेट फ़ाइल के अंत में या उसके पीछे है, तो कोई बाइट पढ़ा नहीं जाता है, और पढ़ता है() शून्य देता है।
यदि गिनती शून्य है, तो पढ़ें() नीचे वर्णित त्रुटियों का पता लगा सकता है। में किसी भी त्रुटि की अनुपस्थिति, या यदि पढ़ा जाता है() त्रुटियों की जांच नहीं करता है, तो 0 (0) की गिनती के साथ पढ़ने() को शून्य देता है और इसका कोई अन्य प्रभाव नहीं होता है।
यदि गणना SSIZE_MAX से अधिक है, तो परिणाम निर्दिष्ट नहीं है।
तो मेरा प्रश्न वास्तव में है, व्यवहार क्यों होता है? क्या यह लिनक्स कर्नेल में एक विनिर्देश है कि यह होना चाहिए या यह किसी और चीज का परिणाम है?
स्पष्टीकरण और संदर्भों के लिए बहुत बहुत धन्यवाद! – Mercado