2015-05-19 9 views
5

लक्ष्य का उपयोग करते समय डिवाइस तक विशेष पहुंच सुनिश्चित करने के लिए, एक सीरियल डिवाइस या अन्य लिनक्स डिवाइस तक पहुंच को "लॉक" करना है। यह रोकता है, उदाहरण के लिए, दोनों प्रोग्राम एक ही सीरियल डिवाइस खोलते हैं और डिवाइस से बाइट पढ़ने के लिए "प्रतिस्पर्धा" करते हैं।लिनक्स में धारावाहिक बंदरगाहों और अन्य उपकरणों को लॉक करने का सबसे अच्छा अभ्यास क्या है?

सलाह /var/lock/LCK..ttyS1 जैसे SYSV-style UUCP डिवाइस लॉक फ़ाइलों का उपयोग करने के लिए सलाह दी गई है। Linux Serial HOTWO: Locking Out Others द्वारा इसकी सिफारिश की जाती है। यह Filesystem Heirarchy Standard में भी प्रलेखित है। यह धारावाहिक टर्मिनल प्रोग्राम जैसे gtkterm, picocom द्वारा कार्यान्वित किया जाता है। इसका समर्थन करने के लिए liblockdev और liblockfile जैसे पुस्तकालय हैं (हालांकि कार्यान्वयन विवरण इन दो पुस्तकालयों के बीच भिन्न हैं)।

हालांकि, मुझे Debian bug #734086 मिला है, जो लिनक्स पर कहता है, SYSV-style UUCP डिवाइस लॉक को हटा दिया गया है, और flock() सलाहकार ताले के बजाय इसका उपयोग किया जाना चाहिए।

हालांकि, मुझे इन SYSV-style UUCP डिवाइस ताले के बहिष्कार का वर्णन करने के लिए एक विश्वसनीय दस्तावेज़ स्रोत नहीं मिल रहा है, और flock() की सिफारिश, डेबियन बग के अलावा ही।

मुझे ioctl(fd, TIOCEXCL) भी मिला है जिसका उपयोग टर्मिनल को लॉक करने के लिए screen उपयोगिता द्वारा किया जाता है।

लिनक्स में धारावाहिक बंदरगाहों और अन्य उपकरणों को लॉक करने के लिए आधुनिक "सर्वोत्तम अभ्यास" कौन सा है? हम इसका वर्णन करने वाले अद्यतित दस्तावेज कहां पा सकते हैं?

+0

मुझे लगता है कि इसने "मुख्य रूप से राय-आधारित" होने के कारण एक करीबी वोट आकर्षित किया है। लेकिन, यूयूसीपी लॉक फाइलों या 'झुंड()' (दोनों जिनमें से "सलाहकार" हैं) का उपयोग करके काम करने के लिए सीरियल पोर्ट लॉकिंग के लिए, यह महत्वपूर्ण है कि सभी प्रोग्राम एक ही विधि का उपयोग करें, या फिर लॉकिंग काम नहीं करेगी। जैसे यदि एक प्रोग्राम यूयूसीपी फ़ाइल ताले का उपयोग करता है, और दूसरा 'झुंड() 'का उपयोग करता है, तो लॉकिंग अप्रभावी है और दोनों बंदरगाह खोल सकते हैं। इसलिए लिनक्स समुदाय में सर्वसम्मति प्राप्त करने के लिए यह व्यावहारिक रूप से महत्वपूर्ण सवाल है। –

उत्तर

1

जहां तक ​​मैं कह सकता हूं, flock() सीरियल बंदरगाहों या अन्य उपकरणों को लॉक करना शायद Debian bug #734086 में डेबियन के नेतृत्व के बाद लिनक्स में जाने का सबसे अच्छा तरीका है। ध्यान दें कि इस डेबियन परिवर्तन के मूल वकील रोजर लेघ, डेबियन और लिनक्स से और 2014/2015 में फ्रीबीएसडी पर चले गए हैं (his comments here देखें)। लेकिन डेबियन flock() विधि से चिपके हुए प्रतीत होता है, इसलिए यह कुछ मूल्यवान है।

हालांकि दिया कैसे खराब यह परिवर्तन इस बिंदु पर व्यापक लिनक्स समुदाय को सूचित कर दिया गया है, यह एक संकलन समय विकल्प के रूप में बड़े SysV शैली UUCP डिवाइस लॉक फ़ाइलें (/var/lock/LCK..ttyS1) का समर्थन करने के लिए अच्छा हो सकता है में उपयोग के लिए सिस्टम अभी भी पुराने लॉक विधि का उपयोग कर रहे हैं।

उदा। picocom अब flock() विधि का उपयोग करने के लिए बदल गया है, SYSV-style UUCP डिवाइस लॉक फ़ाइलों के संकलन-समय वैकल्पिक चयन के साथ।

मैं इसके बारे में सीरियल हाउटो को अपडेट सबमिट करना चाहता हूं (क्योंकि यह "लिनक्स सीरियल लॉक" के लिए पहला Google खोज परिणाम है), लेकिन अभी वर्तमान में एलडीपी वेबसाइट पर दस्तावेज़ अपडेट करना मुश्किल है रखरखाव राज्य।

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