डिवाइस डेटा ट्रांसफर राशि कैसे निर्धारित करें


1

क्या डिवाइस से / के लिए हस्तांतरित डेटा की मात्रा निर्धारित करने का एक तरीका है। मैं ब्लॉक या सेक्टर आकार के बारे में नहीं पूछ रहा हूं। मैं एक रीड / राइट ऑपरेशन द्वारा हस्तांतरित राशि जानना चाहता हूं।

उदाहरण के लिए, यदि मैं 0x200 बाइट के 1 ब्लॉक को स्थानांतरित करना चाहता हूं:

ब्लॉक = फ़्रेड ((शून्य *) & amp; ब्लॉक; 0x200, 1, फ़ाइल * fp)

क्या होता है अगर मैं फ़ाइल के अंत तक पहुँचता हूं और केवल एक आंशिक ब्लॉक पढ़ा जाता है, और मैं वास्तविक बाइट गणना कैसे निर्धारित करता हूं।

मुझे लगता है कि मैं इसके विपरीत कर सकता हूं:

बाइट्स = फ़्रेड ((शून्य *) & ब्लॉक; 1, 0x200, फ़ाइल * एफपी);

लेकिन क्या होगा अगर मैं कई ब्लॉक पढ़ना चाहता हूँ ???

क्या ioctl (dev, FNUM) जैसे कर्नेल फ़ंक्शन है जो वास्तविक बाइट काउंट लौटाएगा?

बहुत धन्यवाद, सीबी

जवाबों:


0

जैसा कि आपने महसूस किया है, आप 1 बाइट के आकार पैरामीटर और 0x200 के रूप में मदों की संख्या का उपयोग कर सकते हैं।

bytes = fread((void*)&Block, 1, 0x200, fp);

तब फ़्रेड आइटमों की संख्या (बाइट्स की संख्या) लौटा देगा वास्तव में पढ़ें।

सभी ब्लॉकों को पढ़ने के लिए आमतौर पर फैर को पाश में बैठाया जाएगा। वैकल्पिक रूप से (आपकी वास्तविक आवश्यकताओं के आधार पर) fstat या stat सिस्टम कॉल का उपयोग फ़ाइल के आकार को पढ़ने से पहले किया जा सकता है।

वहाँ से fread मैन पेज, उदाहरण के लिए संदर्भित लघु ऑब्जेक्ट काउंट यदि 0x201 बाइट्स हैं फ़ाइल में पढ़ा जा रहा है, पहला पढ़ा 0x200 वापस आ जाएगा, दूसरा पढ़ा 1 वापस आ जाएगा।

रिटर्न्स वैल्यूज़

 The functions fread() and fwrite() advance the file position indicator for
 the stream by the number of bytes read or written.  They return the number
 of objects read or written.  If an error occurs, or the end-of-file is
 reached, the return value is a short object count (or zero).

हममम। मुझे हमेशा लगा हुआ फ़्रेड () / फ़ॉराइट () ब्लॉक ओरिएंटेड ट्रांसफ़र के लिए अधिक था, इसलिए 'आकार' पैरामीटर। मुझे लगता है कि विकल्प वास्तव में मैन्युअल रूप से स्थानान्तरण को ट्रैक करने के लिए होगा, और सुझाए अनुसार 1 का 'आकार' का उपयोग करें। हालांकि कुछ को फिर से मजबूत करने जैसा लगता है
Cpmb

Fstat () या स्टेट () के साथ मेरी एकमात्र चिंता यह है कि यदि एक नए बनाए गए rw फ़ाइल को एक्सेस करना फ़ाइल सिस्टम बंद होने तक एक आकार की रिपोर्ट नहीं कर सकता है। सहायता के लिए धन्यवाद। उन कार्यों की जाँच करेंगे।
Cpmb

यह जानने के बिना कि आपके पास फ़ाइल पर कितना नियंत्रण है - सबसे आसान काम फ़ाइल को बंद करना है और यदि आवश्यक हो तो इसे फिर से खोलें।
suspectus
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.