मेरे प्रश्न हैं:एक समारोह async-संकेत सुरक्षित है अगर (एक संकेत हैंडलर के अंदर कहा जा सकता है)
- वहाँ एक रास्ता निर्णायक निर्धारित करने के लिए एक समारोह async-संकेत सुरक्षित है अगर है, तो आप इसके कार्यान्वयन तक पहुंच नहीं है?
- यदि नहीं, तो यह जांचने का कोई तरीका है कि क्या सिग्नल हैंडलर से कॉल करने के लिए फ़ंक्शन असिंक-सिग्नल-सुरक्षित होगा?
आप संकेत के आदमी पृष्ठों पढ़ता है तो() या sigaction(), आप async-संकेत सुरक्षित कार्य (कार्यों कि सुरक्षित रूप से एक संकेत हैंडलर के अंदर कहा जा सकता है) की एक सूची प्राप्त। हालांकि, मुझे विश्वास है कि यह सूची संपूर्ण नहीं है। उदाहरण के लिए, निम्नलिखित पृष्ठ http://linux.die.net/man/7/signal, Async संकेत-सुरक्षित कार्यों शीर्षक के अंतर्गत, पढ़ता है:
POSIX.1-2004 (जिसे POSIX.1-2001 तकनीकी शुद्धिपत्र 2 जाना जाता है) के लिए एक कार्यान्वयन की आवश्यकता है गारंटी देते हैं कि निम्नलिखित कार्यों को सुरक्षित रूप से एक संकेत हैंडलर के अंदर कहा जा सकता है:
और फिर यह सामान्य async-संकेत सुरक्षित ऊपर आदमी पृष्ठों में सूचीबद्ध कार्यों सूची आगे बढ़ते हैं। जैसा कि मैंने इसे पढ़ा है, यह कहता है "यह आवश्यक है", न कि "ये केवल एकमात्र हैं"।
उदाहरण के लिए, this site कहता है कि back_trace_symbols_fd() async-signal सुरक्षित है। वह फ़ंक्शन प्राप्त करता है dladdr() से डेटा है और यह malloc() का उपयोग बैक_trace_symbols() जैसा नहीं करता है, इसलिए ऐसा लगता है कि यह सुरक्षित हो सकता है। इसके अलावा, मैंने कुछ परीक्षण किया, और dladdr() के आउटपुट स्ट्रक्चर में char * चर शामिल हैं, लेकिन इन्हें रनटाइम पर malloc'ed नहीं किया जाता है। दाढ़ी() को बुलाए जाने से पहले वे चार स्ट्रिंग रन-टाइम पर मौजूद होते हैं।
कोई भी विचार या विचार जो मुझे सही दिशा में इंगित कर सकता है उसकी सराहना की जाती है।
मत भूलना ऊपर अपने प्रश्नों के जवाब उपयोगी वोट करने के लिए, या अपने प्रश्नों में से प्रत्येक के लिए सबसे उपयोगी जवाब स्वीकार करने के लिए: यह शायद आदमी पेज की सलाह का पालन करने के लिए सबसे अच्छा है। यदि आप सुनिश्चित नहीं हैं, तो [FAQ] (http://stackoverflow.com/faq) देखें और विशेष रूप से [मैं यहां प्रश्न कैसे पूछूं?] (Http://stackoverflow.com/faq#howtoask) –