2010-06-16 4 views
13

मुझे वास्तव में खेद है अगर यह थोड़े गूंगा लगता है। मैंने अभी पढ़ा है & आर और मैंने कुछ अभ्यासों पर काम किया। इस गर्मी में, मेरी परियोजना के लिए, मैं सी की मेरी समझ को विस्तारित करने के लिए एक लिनक्स उपयोगिता को फिर से कार्यान्वित करने की सोच रहा हूं, इसलिए मैंने जीएनयू टैर और sed के स्रोत को डाउनलोड किया क्योंकि वे दोनों दिलचस्प लगते हैं। हालांकि, मुझे समझने में कठिनाई जहां यह शुरू होता है, जहां मुख्य कार्यान्वयन है, जहां सभी अजीब मैक्रो से आया है, आदिकोई भी जीएनयू स्रोत कोड को समझने के बारे में कैसे जाता है?

मैं समय की एक बहुत कुछ है ताकि वास्तव में एक मुद्दा नहीं है हो रही है। क्या मुझे प्रोग्राम को समझने के लिए पहले जीएनयू टूलचेन (यानी बनाना, binutils, ..) के साथ खुद को परिचित करना चाहिए? या शायद मुझे कुछ छोटे से शुरू करना चाहिए (यदि ऐसी कोई चीज है)?

मुझे लगता है कि अगर मायने रखती जावा, सी के साथ अनुभव के छोटा सा ++ और अजगर की है।

धन्यवाद!

उत्तर

4

GNU Hello शायद सबसे छोटा, सरल जीएनयू प्रोग्राम है और समझने में आसान है।

+2

इस तथ्य में एक मजाक छिपाना चाहिए कि जीएनयू हैलो (2.4.90) का नवीनतम संस्करण tar.gz संग्रह के रूप में 566 KB डाउनलोड है। यह बस ... डरावना है। – unwind

+2

@unwind जीएनयू हैलो सिर्फ "हैलो वर्ल्ड" कार्यक्रम से अधिक है: यह कई भाषाओं में "हैलो वर्ल्ड" प्रिंट करता है, जब आपको इसकी ज़रूरत होती है तो कॉफी और ऋण आपको पैसे देता है। – ereOn

+1

जीएनयू हैलो एक कंकाल है जो ऑटोटूल के मूल उपयोग को दिखाता है, कमांड लाइन विकल्पों को कैसे पार्स करें और अंतर्राष्ट्रीयकरण का समर्थन कैसे करें। अधिकांश डाउनलोड शायद संदेश फाइलें हैं [यह] (http://cvs.savannah.gnu.org/viewvc/hello/po/it.po?root=hello&view=markup) –

1

मैं जानता हूँ कि कभी कभी यह सी कोड के माध्यम से नेविगेट करने के लिए एक गड़बड़ है, खासकर यदि आप यह से परिचित नहीं कर रहे हैं। मेरा सुझाव है कि आप एक tool आप आदि तब काम करता है, प्रतीकों, मैक्रो के माध्यम से ब्राउज़, मुख्य() फ़ंक्शन के लिए देखो में मदद मिलेगी का उपयोग करें।

आप उपकरणों के साथ खुद को परिचित करने के लिए निश्चित रूप से की जरूरत है, लेकिन आप एक विशेषज्ञ बनने के लिए जरूरत नहीं है।

+0

+1 मैं बहुत हूं खुश है कि स्रोत नेविगेटर की एक नई रिलीज है। मैंने इसे 2006 में वापस इस्तेमाल किया और यह एक गैर-सक्रिय परियोजना की तरह दिखता था। वैसे भी, यह एक बहुत अच्छा उपकरण है। – INS

7

tar और sed जैसे प्रोग्रामों की समस्या दो गुना है (यह मेरी राय है, बिल्कुल!)। सबसे पहले, वे वास्तव में पुराने दोनों हैं। इसका मतलब है कि उन्होंने कई कोडिंग शैलियों और विभिन्न व्यक्तित्वों के साथ कई वर्षों में उन्हें बनाए रखा है। जीएनयू उपयोगिताओं के लिए, यह आमतौर पर बहुत अच्छा होता है, क्योंकि वे आम तौर पर एक उचित संगत कोडिंग शैली को लागू करते हैं, लेकिन यह अभी भी एक मुद्दा है। दूसरी समस्या यह है कि वे अविश्वसनीय रूप से पोर्टेबल हैं। आम तौर पर "पोर्टेबिलिटी" को अच्छी चीज के रूप में देखा जाता है, लेकिन जब चरम पर ले जाया जाता है, तो इसका मतलब है कि आपका कोडबेस हार्डवेयर और सिस्टम के विशेष टुकड़ों में अस्पष्ट बग और कोने के मामलों के आसपास काम करने के लिए छोटे हैक्स और चाल से भरा हुआ है। और tar और sed के रूप में व्यापक रूप से पोर्ट किए जाने वाले कार्यक्रमों के लिए, इसका मतलब है कि बहुत कोने के मामलों और अस्पष्ट हार्डवेयर/कंपाइलर्स/ओएस को ध्यान में रखना है।

आप सी जानने के लिए चाहते हैं, तो मैं सबसे अच्छी जगह शुरू करने के लिए कोड है कि दूसरों को लिखा है अध्ययन करने के लिए कोशिश नहीं कर रहा है कहेंगे। इसके बजाय, कोड को स्वयं लिखने का प्रयास करें। यदि आप वास्तव में मौजूदा कोडबेस से शुरुआत करना चाहते हैं, तो उस व्यक्ति को चुनें जिसे सक्रिय रूप से बनाए रखा जा रहा है, जहां आप बना रहे परिवर्तनों को देख सकते हैं क्योंकि वे उन्हें बनाते हैं, मेलिंग सूचियों पर चर्चाओं के साथ-साथ आगे बढ़ते हैं।

tar और sed की तरह अच्छी तरह से स्थापित कार्यक्रमों के साथ, आप परिणाम देख विचार विमर्श कि क्या हुआ गए हैं की, लेकिन आप नहीं देख सकते हैं कि सॉफ्टवेयर डिजाइन फैसले और परिवर्तन वास्तविक समय में किए जा रहे हैं। यह केवल सक्रिय रूप से बनाए रखे सॉफ्टवेयर के साथ ही हो सकता है।

सिर्फ निश्चित रूप से मेरी राय है कि, और आप को एक अलग नज़रिए उसे अपने साथ ले यदि आप चाहें :)

+0

मैं मानता हूं कि सी सीखने का सबसे अच्छा तरीका प्रोग्रामिंग द्वारा है। हालांकि, एक बार जब आप भाषा के वाक्यविन्यास और बारीकियों को महारत हासिल कर लेते हैं, तो यह हमेशा अच्छी तरह से लिखित कोड से चलने में मदद करता है, जो आपको नए तरीकों का विचार देगा व्यावहारिक रूप से भाषा के वाक्यविन्यास/डेटा संरचनाओं को लागू कर सकते हैं। – itisravi

+0

@itisरावी: मुझे अभी भी विश्वास है कि यह सीखना बेहतर है कि विकास के बाद ऐसा होता है, तथ्य के बजाए, हालांकि। उदाहरण के लिए, यदि आप कोड का एक टुकड़ा देखते हैं और आप सोचते हैं "उन्होंने ऐसा क्यों किया, तो उन्होंने ऐसा क्यों नहीं किया (अन्य) रास्ता?" यदि आप एक मेलिंग सूची में एक संदेश पोस्ट कर सकते हैं और * पूछें * तो आप जो भी लिखा है उसे स्वीकार करने के अलावा आप बहुत कुछ सीखने जा रहे हैं। विस्तृत उदाहरण के लिए –

1

जानें ग्रेप उपयोग करने के लिए कैसे यदि आप इसे पहले से ही पता नहीं है और खोज करने के लिए उपयोग कर सकते हैं मुख्य फ़ंक्शन और आपके पसंदीदा रुचियों के लिए। आप ctags या cscope जैसे कोड ब्राउज़िंग टूल का भी उपयोग करना चाह सकते हैं जो कि विम और एमएसी के साथ एकीकृत हो सकते हैं या यदि आप इसे बेहतर पसंद करते हैं तो आईडीई का उपयोग कर सकते हैं।

12

जीएनयू कार्यक्रम बड़े और जटिल हैं। GNU Hello World का आकार दिखाता है कि यहां तक ​​कि सबसे सरल जीएनयू परियोजना को इसके चारों ओर बहुत सारे कोड और कॉन्फ़िगरेशन की आवश्यकता होती है।

ऑटोटूल को शुरुआत के लिए समझना मुश्किल होता है, लेकिन आपको कोड पढ़ने के लिए उन्हें समझने की आवश्यकता नहीं है। यहां तक ​​कि यदि आप कोड को संशोधित करते हैं, तो अधिकांश समय आप आसानी से अपने परिवर्तनों को संकलित करने के लिए चला सकते हैं।

कोड पढ़ने के लिए, आपको स्रोत के माध्यम से नेविगेट करने के लिए एक अच्छा संपादक (वीआईएम, एमैक्स) या आईडीई (ग्रहण) और कुछ टूल्स की आवश्यकता है। टैर प्रोजेक्ट में एक src निर्देशिका है, जो शुरू करने के लिए एक अच्छी जगह है। एक कार्यक्रम हमेशा मुख्य समारोह के साथ शुरू होता है, इसलिए

grep main *.c 

या इस फ़ंक्शन को खोजने के लिए अपने आईडीई का उपयोग करें। यह tar.c. में है अब, सभी प्रारंभिक सामग्री को छोड़ दें,

/* Main command execution. */ 

वहां, आप उपसमूहों के लिए एक स्विच देखते हैं। यदि आप पास करते हैं -एक्स यह करता है, यदि आप पास करते हैं -सी यह करता है, आदि। यह उन आदेशों के लिए शाखाकरण संरचना है। यदि आप जानना चाहते हैं कि ये मैक्रो क्या हैं,

grep EXTRACT_SUBCOMMAND *.h 

वहां आप देख सकते हैं कि वे सामान्य में सूचीबद्ध हैं।

read_and (extract_archive); 

read_and (की परिभाषा) (फिर से ग्रेप के साथ प्राप्त):

EXTRACT_SUBCOMMAND नीचे आप कुछ अजीब देख

read_and (void (*do_something) (void)) 

एकल पैरामीटर एक कॉलबैक की तरह एक समारोह सूचक है , तो read_and माना जाता है कि कुछ पढ़ा जाएगा और फिर फ़ंक्शन extract_archive पर कॉल करें। फिर, उस पर grep और आप इस पर गौर करेगा:

if (prepare_to_extract (current_stat_info.file_name, typeflag, &fun)) 
    { 
     if (fun && (*fun) (current_stat_info.file_name, typeflag) 
     && backup_option) 
    undo_last_backup(); 
    } 
    else 
    skip_member(); 

ध्यान दें कि असली काम होता है जब fun बुला। fun फिर से एक फ़ंक्शन पॉइंटर है, जो ready_to_extract में सेट है। funextract_file पर इंगित कर सकता है, जो वास्तविक लेखन करता है।

मुझे आशा है कि मैं आपको इसके माध्यम से एक बड़ा सौदा करता हूं और आपको दिखाता हूं कि मैं स्रोत कोड के माध्यम से कैसे नेविगेट करता हूं। यदि आपके पास संबंधित प्रश्न हैं तो मुझसे संपर्क करने में संकोच न करें।

+0

+1। बीटीडब्लू, यह भी एक उदाहरण है कि सरल चीजों को कैसे बनाया जा सकता है। किसी कारण से, कुछ लोग सोचते हैं कि यह मजेदार है: - / – PauliL

5

कोर्यूटिल्स (http://ftp.gnu.org/gnu/coreutils/) का स्रोत क्यों डाउनलोड नहीं करें और yes जैसे टूल पर नज़र डालें? सी कोड की 100 से कम लाइनें और जीएनयू सॉफ़्टवेयर का एक पूर्ण कार्यात्मक, उपयोगी और वास्तव में मूल टुकड़ा।

0

मैं ब्राउज़िंग के लिए ctags या cscope का उपयोग करने का सुझाव देता हूं। आप उन्हें vim/emacs के साथ उपयोग कर सकते हैं। वे खुले स्रोत दुनिया में व्यापक रूप से उपयोग किया जाता है।

वे प्रत्येक प्रमुख लिनक्स वितरण के भंडार में होना चाहिए।

0

कुछ मैक्रोज़, उपयोगिता फ़ंक्शंस इत्यादि का उपयोग करने वाले कुछ कोड को समझना मुश्किल हो सकता है।

  1. स्थापित क्यूटी विकास उपकरण और क्यूटी निर्माता

  2. डाउनलोड सूत्रों के आप चाहते हैं: बेहतर एक यादृच्छिक सी या सी ++ सॉफ्टवेयर का कोड ब्राउज़ करने के लिए, मैं इस दृष्टिकोण है, जो मैं आम तौर पर क्या उपयोग का सुझाव निरीक्षण करें, और उन्हें संकलन के लिए सेट करें (आमतौर पर जीएनयू सामान के लिए केवल ./configure)।

  3. Qt निर्माता के लिए Qt .pro फ़ाइल उत्पन्न करने के लिए स्रोत निर्देशिका की जड़ में qmake -project चलाएं।

  4. क्यूटी निर्माता में .pro फ़ाइल खोलें (छाया निर्माण का उपयोग न करें, जब यह पूछता है)।

  5. बस सुरक्षित होने के लिए, क्यूटी निर्माता परियोजनाओं में देखें, डिफ़ॉल्ट बिल्ड चरणों को हटा दें। .pro फ़ाइल क्यूटी निर्माता के अंदर नेविगेशन के लिए है।

  6. वैकल्पिक: कस्टम निर्माण और रन चरणों को सेट करें, यदि आप क्यूटी निर्माता के तहत निर्माण और चलाने/डीबग करना चाहते हैं। केवल नेविगेशन के लिए जरूरी नहीं है।

  7. कोड ब्राउज़ करने के लिए क्यूटी निर्माता का उपयोग करें। विशेष रूप से लोकेटर (केबी शॉर्टकट Ctrl + K) नाम से सामान ढूंढने के लिए, और "कर्सर के नीचे प्रतीक का पालन करें" (केबी शॉर्टकट F2), और "उपयोग ढूंढें" (केबी शॉर्टकट Ctrl-Shift-U) नोट करें।

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