जहां तक मैं बता सकता हूं, यह मानक उपयोगिताओं में कठिन-कोडित है। मैं 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 बना।