जहां तक मैं बता सकता हूं, यह मानक उपयोगिताओं में कठिन-कोडित है। मैं straceदोनों एक d touchएक नई फ़ाइल बनाने और 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फ़ाइल निर्माण पर प्रक्रिया द्वारा संशोधित किया जाएगा ।
आप केवल इस प्रोग्राम के आसपास ही प्राप्त कर सकते हैं: यानी या तो एक सी प्रोग्राम के भीतर से फाइल बनाते समय, जहाँ आप सिस्टम कॉल सीधे या किसी भाषा के भीतर से करते हैं जो आपको एक निम्न-स्तरीय syscall बनाने की अनुमति देता है (उदाहरण के लिए देखें पर्ल के sysopenतहत) perldoc -f sysopen)।
umaskमेरी मुलाकात हमेशा 0022 हुई, डिफ़ॉल्ट अनुमति 644 बना।