2009-11-06 18 views
29

यूनिक्स में read() और pread() फ़ंक्शंस के बीच क्या अंतर है?
उनके बीच चयन करते समय, मुझे किन बिंदुओं पर विचार करना चाहिए?यूनिक्स में पढ़ने और प्रीड के बीच क्या अंतर है?

मैं उनके बीच के अंतर के लिए गुग हो गया लेकिन बिना परिणाम के।

उत्तर

34

Pread() सिर्फ पढ़ने (तरह काम करता है) लेकिन फ़ाइल सूचक को संशोधित किए बिना फ़ाइल में निर्दिष्ट स्थान से पढ़ता है।

आप इसे प्रयोग करेंगे जब आप की जरूरत है बार-बार तय की भरपाई डेटा को पढ़ने के लिए, उदाहरण के लिए एक डेटाबेस सूचकांक है कि फाइल में अलग-अलग रिकॉर्ड को इंगित करता है, पर बचाने के लिए() कॉल करना चाहते हैं।

मूल रूप से पढ़ने() का उपयोग करता है, तो अपने डेटा अनुक्रमिक है या pread() यदि आप जानते हैं, या जिस पर पढ़ने के लिए ऑफसेट गणना कर सकते हैं।

16
इस link से

,

pread की atomicity प्रक्रियाओं या धागे कि साझा फ़ाइल वर्णनकर्ता एक विशेष पर एक साझा फ़ाइल से पढ़ने के लिए एक ताला तंत्र कि आवश्यक होगा का उपयोग किए बिना ऑफसेट सक्षम बनाता है अलग-अलग lseek में एक ही परिणाम प्राप्त करने के लिए और कॉल सिस्टम पढ़ें। परमाणुता की आवश्यकता है क्योंकि फ़ाइल सूचक साझा किया गया है और एक थ्रेड अन्य प्रक्रिया के बाद lseek को पूरा करने के बाद lseek का उपयोग कर पॉइंटर को स्थानांतरित कर सकता है लेकिन पढ़ने से पहले।

0

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

5

Google ने मुझे man pread दिया।

यदि आप read() दो बार हैं, तो आपको दो अलग-अलग परिणाम मिलते हैं, जो दिखाते हैं कि read() फ़ाइल में अग्रिम।

यदि आप pread() दो बार, आपको एक ही परिणाम मिलता है, जो दिखाता है कि pread() फ़ाइल में एक ही बिंदु पर रहता है।

+1

काफी नहीं। यह दिखाता है कि 'pread() 'या तो फ़ाइल स्थिति नहीं बदलता है या फ़ाइल स्थिति की परवाह नहीं करता है। (जैसा कि होता है, दोनों सत्य हैं।) –

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