সাধারণ সিস্টেম কল ইন্টারফেসগুলি কি কোনও ফাইলের আকার হ্রাস করতে দেয় (এটিকে ভিন্ন আইনের সাথে প্রতিস্থাপন না করে)?


9

open()কোনও ফাইলের কোনও উপায় আছে এবং এটি সঙ্কুচিত হওয়ার কারণ? একজন অবশ্যই অবশ্যই এটিকে অ্যাপেনড-মোডে খুলতে পারেন বা শেষের দিকে চেষ্টা করতে পারেন এবং এগুলি বৃদ্ধির জন্য লিখতে পারেন। তবে যতদূর আমি জানি, সাধারণ ইউনিক্স-স্টাইল সিস্টেম কল ইন্টারফেসের মাধ্যমে কোনও ফাইল সঙ্কুচিত করার কোনও পদ্ধতি নেই।

এটি করার একমাত্র উপায়, যতদূর আমি জানি, এটি একটি নতুন সংক্ষিপ্ত ফাইল তৈরি করে rename()এটি পুরানো ফাইলের জায়গায় তৈরি করা।

আমি কেবল নিশ্চিতকরণ চেয়েছিলাম, কারণ আমি একটি উত্তর দেখেছি যা বোঝায় যে একটি ফাইল সম্পাদনা করা যে কোনও নতুন ফাইল তৈরির প্রক্রিয়াটির পরিবর্তে এবং নাম পরিবর্তনের পরিবর্তে সরাসরি ফাইলটিতে কাজ করা সম্ভব ছিল on

আমি সবসময়ই ভেবেছি যে libc এবং ইউনিক্স-স্টাইল সিস্টেম কল ইন্টারফেসের ফাইল এপিআই ফাইল সিস্টেম সঙ্কলনের পক্ষে ফাইল সঙ্কুচিত করার অনুমতি দেয় না এবং সম্ভবত ব্যবহারের নিদর্শনগুলি এড়িয়ে যেতে পারে যা খণ্ডগুলিতে অবদান রাখতে পারে।


2
fopen"ডাব্লু" (বা "ডাব্লু +") মোডে কেবল একটি ফাইল খোলার সাথে এটি স্বয়ংক্রিয়ভাবে শূন্য দৈর্ঘ্যে ছাঁটাই হবে। বা পুরানো সামগ্রীগুলি সংরক্ষণ করার জন্য আপনি একটি শূন্য-আকারের আকারে সঙ্কুচিত হওয়া বোঝাতে চান?
উইজার্ড

4
শুধু এফওয়াইআই, 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()। আপনি যদি মন্তব্যটির পরিবর্তে প্রকৃত উত্তর হিসাবে এটি চান তা আমাকে জানান।
সের্গেই কলডিয়াজন্য

পছন্দ করুন আমি ডেভিড ফোস্টার এর উত্তরটিকে অগ্রাহ্য করেছি কারণ এটি প্রশ্নের একটি উপসেটের উত্তর দেয়, তবে আমি এ্যাকারাসের আলোকে এটি গ্রহণ করছি না। আমি এটিকে হ্যাঁ এবং কোনও প্রকারের উত্তর হিসাবে গ্রহণ করব না, তবে আইক্রাসের উত্তর ইতিমধ্যে প্রমাণ করেছে যে আসল উত্তরটি একটি "হ্যাঁ"।
জোল

উত্তর:


22

man -s 2 ftruncate বলেছেন

DESCRIPTION
   The  truncate()  and  ftruncate()  functions cause the regular file
   named by path or referenced by fd to be truncated to a size of precisely
   length bytes.

...

CONFORMING TO
   POSIX.1-2001, POSIX.1-2008, 4.4BSD, SVr4 (these calls first appeared in 4.2BSD).

এটি আরও বলা যায় যে আপনি যদি ফ্রন্টঙ্কেট ব্যবহার করেন তবে অবশ্যই আপনাকে লেখার জন্য ফাইলটি খুলতে হবে, এবং যদি আপনি কাটা ব্যবহার করেন তবে অবশ্যই ফাইলটি লিখিত হতে হবে।


কোনও ফাইলের সাথে যুক্ত হওয়ার ফলে ওএসকে প্রথমে truncateএটি নতুন ফাইল আকারের জন্য উপযুক্ত করে এবং তারপরে write এটি তৈরি করে। আপনি truncateযে সিস্টেম কলটি সন্ধান করছেন তাও তাই ।
mgarciaisaia

1
লিনাক্সে, আরও দেখুনfallocate(FALLOC_FL_COLLAPSE_RANGE)
স্টাফেন চেজেলাস

2

open(2)সিস্টেম কল গ্রহণ O_TRUNCপতাকা যে ফাইল আকার হ্রাস করুন:

O_TRUNC- যদি ফাইলটি বিদ্যমান থাকে এবং নিয়মিত ফাইল হয় এবং ফাইলটি সফলভাবে খোলা হয় O_RDWRবা O_WRONLY, এর দৈর্ঘ্য 0 কেটে নেওয়া হবে এবং মোড এবং মালিক অপরিবর্তিত থাকবে। এটি ফিফোর বিশেষ ফাইল বা টার্মিনাল ডিভাইস ফাইলগুলিতে কোনও প্রভাব ফেলবে না। অন্যান্য ফাইলের প্রকারে এর প্রভাব বাস্তবায়ন-সংজ্ঞায়িত। O_TRUNCউভয়ই O_RDWRবা ব্যবহার ছাড়াই ফলাফল O_WRONLYনির্ধারিত।

এটি প্রায়শই ব্যবহৃত হয় যখন প্রোগ্রামটি কোনও ফাইলের বিষয়বস্তু পুরোপুরি ওভাররাইট করে। একটি উদাহরণ হিসেবে আপনার শেল ফাইল ফেরৎ অপারেটর command > file

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.