मान लें कि इरादा शुरुआत में एक बड़े छेद के साथ एक फाइल बनाना है जिसे हम लिनक्स चलाने वाले एम्बेडेड डिवाइस पर बाद में लिखेंगे। हम फ़ाइल खोलते हैं, फ़ाइल डिस्क्रिप्टर प्राप्त करते हैं और एक निश्चित, ज्ञात स्थिति की तलाश करने के लिए lseek
पर कॉल करते हैं। इसके बाद, जब हम उस फ़ाइल को तलाशने की स्थिति में लिखना चाहते हैं, तो हम write
पर कॉल करते हैं।शून्य के बिना फ़ाइल में लिखें लिनक्स
हालांकि, पहली बार लिखने के द्वारा बनाए गए छेद को शून्य से भर दिया जाता है और यदि छेद काफी बड़ा होता है, तो इस ऑपरेशन में कुछ समय लग सकता है। मेरे आवेदन में, इस शून्य प्रारंभिकता की कोई आवश्यकता नहीं है, क्योंकि छेद सटीक लंबाई का है और मैं इसे बाद में अपने डेटा से भर दूंगा।
seek
के बाद कॉल को शून्य-भरने से रोकने के लिए कोई तरीका है (भले ही इसमें फाइल सिस्टम ड्राइवर को संशोधित करना शामिल हो)? वैकल्पिक रूप से, फ़ाइल की शुरुआत से पहले फ़ाइल में लिखने का एक तरीका है (फ़ाइल के सामने जोड़ना)?
आप सही हैं। मेरे मामले में, 'dd if =/dev/zero =/mnt/mmc/जो भी bs = 1k seek = 100000' चल रहा है लगभग 10 सेकंड लेता है, और परिणामस्वरूप फ़ाइल का आकार 97.7 एम है।फाइल सिस्टम vfat है, और दुर्भाग्यवश मैं इसे बदल नहीं सकता, क्योंकि मैं एक एसडी-कार्ड पर काम कर रहा हूं, जिसे कई प्रणालियों में पठनीय किया जाना चाहिए। –
हां, एफएटी फाइल सिस्टम में से कोई भी किसी भी प्रकार के स्पैस फ़ाइल स्टोरेज का समर्थन नहीं करता है जिसे मैं जानता हूं। आप जो भी मांग रहे हैं उसे पाने का शायद कोई रास्ता नहीं है, लेकिन शायद उस वास्तविक समस्या का एक अच्छा समाधान है जिसे आप हल करने का प्रयास कर रहे हैं। –
@NebojsaMrmak: इस [अन्य उत्तर] पर एक नज़र डालें (http://stackoverflow.com/a/4396912/865874), एचटीएच। – rodrigo