POSIX

2010-01-26 15 views
6

में S_IRUSR semantics मैं POSIX API सीख रहा हूं, और मुझे कुछ नामों के पीछे तर्क समझ में नहीं आता है।POSIX

उदा। S_IRUSR, S_IRUSR

S क्या करता है? मुझे लगता है कि R और W पढ़ने और लिखने के लिए हैं। लेकिन POSIX के बाद क्या नामकरण सम्मेलन? Win32 की तरह हंगरी नोटेशन नामकरण के लिए, POSIX उनके नामकरण के लिए क्या अनुसरण करता है? POSIX जैसे मानकों के लिए, इसके लिए प्रलेखन होना चाहिए ...

उत्तर

3

अग्रणी S_ यह पहचानने के लिए कि किन संरचना/कार्य निरंतर जाता है।

<sys/stat.h> से, स्थिरांक S_IRUSR, S_IWUSR, आदि struct stat के लिए st_mode सदस्य (stat() और दोस्तों में प्रयुक्त) के लिए संभावित मान रहे हैं। struct stat के सभी सदस्यों उपसर्ग st_ से शुरू होते हैं, और कई stat-संबंधित मैक्रोज़ भी हैं जो S_ से भी शुरू होते हैं। सम्मेलन केवल मिलान संरचना नाम, सदस्य नाम, और स्थिरांक बनाने के लिए आसान है।

+2

असल में सम्मेलन का एक और बहुत ही महत्वपूर्ण उद्देश्य है। यह 'स्ट्रक्चर स्टेट' इत्यादि को तोड़ने से '# परिभाषित मोड foo' जैसी चीज़ों को रोकता है।' St_ * 'हेडर द्वारा आरक्षित नामस्थान में है। मानक को प्रत्येक मोड को 'मोड' जैसे व्यक्तिगत रूप से आरक्षित करना होगा, तो यह और अधिक समस्याग्रस्त होगा ... –

8

मुझे यकीन नहीं है कि उनके पास कोई अर्थ है या नहीं, सिवाय इसके कि वे sys/stat.h में हैं, इसलिए S "stat" के लिए खड़ा हो सकता है।

मैंने कुछ जासूसी कार्य करने की कोशिश की, उदाहरण के लिए, IEEE Std 1003.1, 2004 Edition entry for sys/stat.h यह कहता है: सबसे पहले जारी किया गया समस्या 1. एसवीआईडी ​​के अंक 1 से प्राप्त।

फिर, Developer Specs for System V Application Binary Interface (देखें Volume 1a [पीडीएफ]), पेज 95, और यहां तक ​​कि S_ के साथ शुरुआत के नाम है। मैं इससे आगे पीछे नहीं जा सका।

सामान्य रूप से आपके प्रश्न के बारे में: इसमें से अधिकांश इतिहास है। उदाहरण के लिए, creat() पॉज़िक्स में है, लेकिन name comes from history है। POSIX फ़ंक्शन नामों (और व्यवहार) में से कई सी मानक से आता है। वास्तव में, उनके विवरण में आमतौर पर text like:

इस संदर्भ पृष्ठ पर वर्णित कार्यक्षमता आईएसओ सी मानक के साथ गठबंधन है। यहां वर्णित आवश्यकताओं और आईएसओ सी मानक के बीच कोई भी संघर्ष अनजान है। आईईईई स्टडी 1003.1-2001 की यह मात्रा आईएसओ सी मानक को रोकती है।

मुझे लगता है कि POSIX API के पीछे कोई तर्क खोजने का एकमात्र तरीका यूनिक्स के इतिहास को पढ़ना है।

निम्नलिखित मदद मिल सकती है:

1

आलोक सही है। the specification for sys/stat.h देखें। यदि आप अपनी खुद की स्टेट()/statvfs() कार्यान्वयन लिखना चाहते थे (पोर्ट्स में बहुत आम है जो गैर-पॉज़िक्स प्रोग्राम POSIX होस्ट पर काम करते हैं) तो आप इसे किसी अन्य चीज़ के साथ उपसर्ग करेंगे, यानी Z_IRUSR।

जबकि मेरे पास एक सूची आसान नहीं है, मुझे पूरा यकीन है कि कुछ सी कार्यान्वयन sys/stat के लिए कई विकल्प प्रदान करते हैं, एस_ आपको ठेठ पॉज़िक्स व्यवहार और (एक्स) आपको कुछ और दे रहा है। मैंने यह नहीं देखा है कि लंबे समय से, हालांकि, यही कारण है कि मैं काफी याद नहीं कर सकता जहां मैं इसमें भाग गया।

+0

आपने उस लिंक को पेश किया जैसे कि यह आलोक के जवाब का समर्थन करने जा रहा था, लेकिन यह वही लिंक है जो आलोक ने दिया था, और मुझे विनिर्देशन में कुछ भी नहीं दिख रहा है कि क्यों * नाम सभी के साथ शुरू होते हैं। इसके अलावा, क्यों क्या आप गैर-पॉजिक्स होस्ट पर अलग-अलग नामों का उपयोग करेंगे? क्या वह कोड * कम * पोर्टेबल नहीं बनायेगा? –

+0

@ रोब केनेडी: जैसा कि मैंने देखा, (अब याद रखें, हम वापस जा रहे हैं जब एकल यूनिक्स विनिर्देशन को धक्का दिया जा रहा था) कुछ प्रणालियों ने अपने मालिकाना कार्यान्वयन के शीर्ष पर POSIX लागू किया था, इसलिए आपको जानबूझकर POSIX प्राप्त करने के लिए POSIX का उपयोग करना पड़ा । इसलिए, नामस्थान सौदा करने का एक कारक था। आप गैर-पॉजिक्स होस्ट पर अलग-अलग नामों का उपयोग नहीं करेंगे, आप पॉज़िक्स होस्ट पर अलग-अलग नामों का उपयोग करेंगे। मैंने गलती से इसे उलट दिया, धन्यवाद! –

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