2011-06-30 8 views
7

मैं उस स्टेट कमांड की स्टेट स्ट्रक्चर के st_mode फ़ील्ड के झंडे को समझने की कोशिश कर रहा हूं, लेकिन मुझे इतना कठिन समय है! मैं इस उदाहरण here पाया है, लेकिन मैं वास्तव में इस कोड को टुकड़ा समझ में नहीं आता:स्टेट सिस्टम कॉल के st_mode के लिए झंडे

if (mode & S_IRUSR) str[1] = 'r'; /* 3 bits for user */ 
if (mode & S_IWUSR) str[2] = 'w'; 
if (mode & S_IXUSR) str[3] = 'x'; 

if (mode & S_IRGRP) str[4] = 'r'; /* 3 bits for group */ 
if (mode & S_IWGRP) str[5] = 'w'; 
if (mode & S_IXGRP) str[6] = 'x'; 

if (mode & S_IROTH) str[7] = 'r'; /* 3 bits for other */ 
if (mode & S_IWOTH) str[8] = 'w'; 
if (mode & S_IXOTH) str[9] = 'x'; 

मुझे पता है कि "&" बिटवाइज़ AND ऑपरेटर, लेकिन कुछ भी नहीं है। मुझे यह भी नहीं पता कि क्या पूछना है।

पीडी: मैंने पूछा पिछले प्रश्नों के बारे में क्षमा करें। मुझे नहीं पता कि किसी प्रश्न का उत्तर कैसे दिया जाए या उस तरह कुछ भी :(

उत्तर

2

मोड bitfield है जो डेटा पैक करने का एक आम तरीका है। फ़ील्ड में प्रत्येक बिट को टॉगल स्विच के रूप में सेट करें जिसे सेट किया जा सकता है । बंद करने के लिए या पर अगर टॉगल पर है, तो आप को देखने के लिए अगर उचित बिट & ऑपरेटर का उपयोग निर्धारित किया गया है की जाँच की जांच करने के लिए आप का उपयोग कर बिट्स सेट कर सकते हैं |। और का उपयोग कर उन्हें स्पष्ट ~ bitwise operations

1

खैर, POSIX spec for <sys/stat.h>struct stat के st_mode फ़ील्ड से आप जो कुछ भी सीख सकते हैं, उसे समझाता है।

क्या आपका प्रश्न "यह फ़ील्ड मुझे क्या बता सकता है" या है यह "मैं जानकारी कैसे निकालें", या दोनों?

2

ऑपरेटिंग सिस्टम प्रोग्रामिंग में यह सामान्य है कि किसी भी प्रकार का वर्णन करने वाली बिट्स की श्रृंखला रखने के लिए हस्ताक्षरित पूर्णांक का उपयोग करना सामान्य है। इस मामले में, मोड में 9 बिट ब्याज है। एक बिट बताता है कि क्या मालिक पढ़ सकता है, मालिक के लिए एक लिखने के लिए, एक मालिक के निष्पादन के लिए, और समूह और अन्य के लिए समान बिट्स। यह चाल निकालने में है कि थोड़ा सा सेट है या नहीं।

यहां एक उदाहरण है। S_IRUSR एक बिटमास्क का नाम है जो "स्वामी पढ़ने" बिट का वर्णन करता है। इसे the specs में 0400 (ऑक्टल) के रूप में परिभाषित किया गया है जो बाइनरी में 100000000 का अनुवाद करता है। जब आप मुखौटा के साथ बाइनरी और इस मान को लेते हैं, तो मास्क के 9वें बिट सेट होने पर आपको 100000000 (बाइनरी) मान मिलता है। अन्यथा आपको 0.

यदि कोई बड़ा मान वापस लौटाया गया है, और अन्यथा गलत है तो if-statement सत्य पर मूल्यांकन करता है। इस तरह यदि बिट सेट किया गया है, तो 'आर' स्ट्रिंग में स्थिति 1 में लिखा गया है। वही तकनीक अन्य सभी बिट्स पर भी लागू होती है।

+0

धन्यवाद, मुझे नहीं पता था कि यह ऑक्टल था, इसलिए मेरा कार्यक्रम काम नहीं करता! :-) – Gandaro

संबंधित मुद्दे