open()
কোনও ফাইলের কোনও উপায় আছে এবং এটি সঙ্কুচিত হওয়ার কারণ? একজন অবশ্যই অবশ্যই এটিকে অ্যাপেনড-মোডে খুলতে পারেন বা শেষের দিকে চেষ্টা করতে পারেন এবং এগুলি বৃদ্ধির জন্য লিখতে পারেন। তবে যতদূর আমি জানি, সাধারণ ইউনিক্স-স্টাইল সিস্টেম কল ইন্টারফেসের মাধ্যমে কোনও ফাইল সঙ্কুচিত করার কোনও পদ্ধতি নেই।
এটি করার একমাত্র উপায়, যতদূর আমি জানি, এটি একটি নতুন সংক্ষিপ্ত ফাইল তৈরি করে rename()
এটি পুরানো ফাইলের জায়গায় তৈরি করা।
আমি কেবল নিশ্চিতকরণ চেয়েছিলাম, কারণ আমি একটি উত্তর দেখেছি যা বোঝায় যে একটি ফাইল সম্পাদনা করা যে কোনও নতুন ফাইল তৈরির প্রক্রিয়াটির পরিবর্তে এবং নাম পরিবর্তনের পরিবর্তে সরাসরি ফাইলটিতে কাজ করা সম্ভব ছিল on
আমি সবসময়ই ভেবেছি যে libc এবং ইউনিক্স-স্টাইল সিস্টেম কল ইন্টারফেসের ফাইল এপিআই ফাইল সিস্টেম সঙ্কলনের পক্ষে ফাইল সঙ্কুচিত করার অনুমতি দেয় না এবং সম্ভবত ব্যবহারের নিদর্শনগুলি এড়িয়ে যেতে পারে যা খণ্ডগুলিতে অবদান রাখতে পারে।
open()
এবং openat()
ইতিমধ্যে ছাঁটাইয়ের জন্য একটি পতাকা রয়েছে, O_TRUNC
যাতে প্রযুক্তিগতভাবে এটি ফাইল সঙ্কুচিত করে - অর্থাৎ, সম্পূর্ণরূপে সঙ্কুচিত হয় - ইনোড পরিবর্তন না করে। এর সর্বাধিক বিখ্যাত উদাহরণ হ'ল command > file.txt
ফাইল উপস্থিত থাকলে তা কেটে ফেলা হবে। যদি আপনি চালনা strace
করেন তবে bash -c 'true > /dev/null'
আপনি openat(AT_FDCWD, "/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666)
আউটপুট দেখতে পাবেন । অবশ্যই কাটা আকারের পরিবর্তনশীল আকারের জন্য আপনার সিস্কেল দরকার truncate()
। আপনি যদি মন্তব্যটির পরিবর্তে প্রকৃত উত্তর হিসাবে এটি চান তা আমাকে জানান।
fopen
"ডাব্লু" (বা "ডাব্লু +") মোডে কেবল একটি ফাইল খোলার সাথে এটি স্বয়ংক্রিয়ভাবে শূন্য দৈর্ঘ্যে ছাঁটাই হবে। বা পুরানো সামগ্রীগুলি সংরক্ষণ করার জন্য আপনি একটি শূন্য-আকারের আকারে সঙ্কুচিত হওয়া বোঝাতে চান?