c वजन सी मानक पुस्तकालय के लिए सुरक्षित विकल्प




हमारा पुस्तकालय (6)

डीजे बर्नस्टेन, djbdns और djbdns लेखक के रूप में जाना जाने वाले डीजे बर्नस्टेन ने djblib का निर्माण djblib , जो कि कई सी मानक पुस्तकालय कार्यों के लिए एक तेज़, तंग, सुरक्षित विकल्प प्रदान करता है।

सी मानक पुस्तकालय कुख्यात गरीब है जब यह I / O सुरक्षा की बात आती है कई कार्यों में बफर ओवरफ्लो ( gets , scanf ) होता है, या उचित तर्क ( scanf ) नहीं दिए जाने पर मेमोरी को रोक सकता है। हर एक बार और थोड़ी देर के बाद, मैं एक उद्यमी हैकर आया हूं जिसने अपनी खुद की लाइब्रेरी लिखी है जिसमें इन दोषों का अभाव है।

इन पुस्तकालयों में से सबसे अच्छा क्या देखा गया है? क्या आपने उन्हें उत्पादन कोड में उपयोग किया है, और यदि ऐसा है, जो शौक परियोजनाओं से अधिक है?


आप हमेशा अपनी पसंद की किसी लाइब्रेरी को लागू करने और इसका इस्तेमाल करने की स्वतंत्रता रखते हैं - कठिन हिस्सा यह सुनिश्चित कर रहा है कि यह उन प्लेटफार्मों पर उपलब्ध है जिन पर आपको काम करने के लिए अपने सॉफ़्टवेयर की ज़रूरत है। आप मानक कार्यों के आस-पास रैपर का उपयोग भी कर सकते हैं जहां उपयुक्त।

क्या यह वास्तव में एक अच्छा विचार है, यह कुछ विवादात्मक है, लेकिन सी मानक समिति द्वारा प्रकाशित TR24731 है - सी फ़ंक्शन के एक सुरक्षित सेट के लिए वहां निश्चित रूप से कुछ अच्छी चीजें हैं यह प्रश्न देखें: क्या आप अपने सी कोड में TR 24731 सुरक्षित फ़ंक्शन का प्रयोग करते हैं? , जिसमें तकनीकी रिपोर्ट के लिंक शामिल हैं


शायद पूछने के लिए पहला प्रश्न यह है कि क्या वास्तव में सादे सी की ज़रूरत है? (शायद एक भाषा की तरह शुद्ध या जावा एक विकल्प है - फिर उदाहरण बफर ओवरफ्लो वास्तव में एक समस्या नहीं है)

यदि अन्य उच्च स्तरीय भाषाओं एक विकल्प नहीं हैं तो एक और विकल्प सी + + में अपनी परियोजना के कुछ हिस्सों को लिखना है। आप एक सी इंटरफ़ेस कर सकते हैं जो सी ++ कोड को एनक्यूलेट करता है यदि आपको वास्तव में सी की आवश्यकता होती है।

क्योंकि अगर आप सभी उन्नत फ़ंक्शन जोड़ते हैं तो C ++ मानक लाइब्रेरी में निर्माण होता है - आपका सी कोड केवल अधिक से अधिक समय तक मामूली तेज़ी से होता है (और मौजूदा और परीक्षणित ढांचे से बहुत अधिक बग होते हैं)।



मैं जीएलबी लाइब्रेरी का उपयोग करता हूं, इसमें कई अच्छे मानक और गैर मानक कार्य हैं I

Https://developer.gnome.org/glib/stable/ देखें

और शायद आप प्यार में पड़ जाते हैं ... :)

उदाहरण के लिए:

https://developer.gnome.org/glib/stable/glib-String-Utility-Functions.html#g-strdup-printf

बताते हैं कि g_strdup_printf है:

मानक सी sprintf () फ़ंक्शन के समान, लेकिन सुरक्षित, चूंकि यह आवश्यक अधिकतम स्थान की गणना करता है और परिणाम को रखने के लिए स्मृति को आवंटित करता है।


मेरा मानना ​​है कि अपाचे पोर्टेबल रनटाइम (एपीआर) पुस्तकालय मानक सी लाइब्रेरी की तुलना में सुरक्षित है। मैं इसे इस्तेमाल करता हूं, ठीक है, एक अपाचे मॉड्यूल के भाग के रूप में, लेकिन स्वतंत्र प्रक्रियाओं के लिए भी।







low-level