আমি যতদূর বলতে পারি, এটি স্ট্যান্ডার্ড ইউটিলিটিগুলিতে কঠোর কোডড। আমি একটি নতুন ফাইল তৈরি করা এবং একটি নতুন ডিরেক্টরি তৈরি করা strace
উভয়ই dtouch
mkdir
touch
ট্রেস এই উত্পাদিত:
open("newfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
mkdir
ট্রেস এটি উত্পাদন যখন :
mkdir("newdir", 0777) = 0
সি তে ফাইল / ডিরেক্টরি তৈরির প্রক্রিয়া কোডিংয়ের সংক্ষিপ্ততা, আমি ডিফল্ট অনুমতিগুলি পরিবর্তনের কোনও উপায় দেখতে পাচ্ছি না। যদিও আমার কাছে এটি মনে হয় যে ডিফল্টরূপে ফাইলগুলি সম্পাদনযোগ্য না করে তা বোঝা যায়: আপনি চান না যে কোনও এলোমেলো পাঠ্য দুর্ঘটনাক্রমে শেল কমান্ড হিসাবে ভুল ধারণাটিযুক্ত হয়ে উঠুক।
হালনাগাদ
অনুমতির বিটগুলি কীভাবে স্ট্যান্ডার্ড ইউটিলিটিগুলিতে হার্ড কোডড হয় তার একটি উদাহরণ দেওয়ার জন্য। coreutils
প্যাকেজটিতে দুটি ফাইল থেকে কিছু প্রাসঙ্গিক লাইন এখানে রয়েছে যা উভয়ের জন্য উত্স কোড touch(1)
এবং mkdir(1)
অন্যদের মধ্যে রয়েছে:
mkdir.c
:
if (specified_mode)
{
struct mode_change *change = mode_compile (specified_mode);
if (!change)
error (EXIT_FAILURE, 0, _("invalid mode %s"),
quote (specified_mode));
options.mode = mode_adjust (S_IRWXUGO, true, umask_value, change,
&options.mode_bits);
free (change);
}
else
options.mode = S_IRWXUGO & ~umask_value;
}
অন্য কথায়, যদি মোডটি নির্দিষ্ট না করা থাকে তবে এটির S_IRWXUGO
দ্বারা সংশোধিত (পড়ুন: 0777) এ সেট করুন umask_value
।
touch.c
আরও স্পষ্ট:
int default_permissions =
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
এটি, প্রত্যেককে পড়ার এবং লেখার অনুমতি দিন (পড়ুন: 0666), যা umask
অবশ্যই ফাইল তৈরির প্রক্রিয়া দ্বারা সংশোধিত হবে ।
আপনি কেবলমাত্র এই প্রোগ্রামটিমেটিকভাবে ঘুরে আসতে পারবেন: যেমন কোনও সি প্রোগ্রামের মধ্যে ফাইল তৈরি করার সময়, যেখানে আপনি সিস্টেমটি সরাসরি কল করেন বা এমন কোনও ভাষার মধ্যে যা আপনাকে নিম্ন স্তরের সিস্কেল তৈরি করতে দেয় (উদাহরণস্বরূপ পার্লের sysopen
নীচে দেখুন perldoc -f sysopen
)।
umask
আমার সাথে দেখা হয়েছিল সর্বদা 0022, ডিফল্ট অনুমতি