2011-11-20 12 views
5

क्या मैनिक्स पृष्ठों का उपयोग करके संरचना परिभाषाओं को देखना संभव है जिस तरह से हम यूनिक्स में फ़ंक्शन परिभाषाएं देख सकते हैं?मैन पेजों का उपयोग करके संरचना परिभाषाएं प्राप्त करना

उदाहरण के लिए, नेटवर्क प्रोग्रामिंग के लिए, हम struct sockaddr_in नामक संरचना का उपयोग करते हैं। क्या यह देखने के लिए वैसे भी है कि लाइब्रेरी में मैन पेज का उपयोग करके कैसे sockaddr_in परिभाषित किया गया है?

किसी भी मदद की सराहना की जाएगी! धन्यवाद!

+1

यदि आप विम का उपयोग कर रहे हैं, तो आप '/ usr/include' निर्देशिका के टैग जेनरेट करने के लिए ctags का उपयोग कर सकते हैं और फिर परिभाषा देखने के लिए टैग पर कूद सकते हैं। अन्यथा यह एक ओपन सोर्स प्रोजेक्ट का अच्छा अवसर दिखता है! –

उत्तर

2

यह फ़ंक्शन पर निर्भर करता है। उदाहरण के लिए, bind(2) के man page को देखकर आप struct sockaddr की परिभाषा प्राप्त कर सकते हैं।

दुर्भाग्यवश, struct sockaddr के लिए विशेष रूप से कोई मैन पेज नहीं है।

इस जानकारी को प्राप्त करने के अन्य तरीके उचित हेडर फाइलों को खोजना होगा।

+0

धन्यवाद। हेडर फाइलों को देखकर निश्चित रूप से एक विकल्प है। लेकिन क्या उस संरचना को निर्धारित करने का कोई तरीका है जिसमें विशेष संरचना है? –

+1

ठीक है, मुझे लगता है कि एक Google खोज एक अच्छा तरीका होगा। आपकी निर्देशिका में संरचना के लिए एक और तरीका [grep] (http://linux.die.net/man/1/grep) होगा। – Anthony

+0

Google खोज सभी का सबसे अच्छा विकल्प है .. lol .. लेकिन दुर्भाग्यवश मुझे लाइव इंटरनेट कनेक्शन के बिना कभी-कभी काम करना पड़ता है। –

1

और मुझे यकीन नहीं है कि आपको वास्तव में परवाह करना चाहिए: सिस्टम कॉल को वास्तविक डेटा प्रकारों से निपटने और प्रदान करने के रूप में देखा जा सकता है। उदाहरण के लिए, भले ही open एक पूर्णांक देता है, फिर भी उस पूर्णांक को बढ़ाने का कोई अर्थ नहीं है। ऐसे कारणों से Ocaml Unix मॉड्यूल open के परिणाम को file_descr प्रकार के रूप में वर्णित करता है, int (जो वास्तव में है) के रूप में नहीं।

दूसरे शब्दों में, struct sockaddr_in बदलकर यदि आपका सी या सी ++ कोड आदर्श रूप से परिवर्तित नहीं होना चाहिए।

+1

यह एक मायने में सच है, लेकिन [कनेक्ट] (http://linux.die.net/man/2/connect) जैसे फ़ंक्शंस के बारे में क्या है जहां आपको 'स्ट्रक्चर सॉकडर' और दोस्तों की संरचना को जानने की आवश्यकता है उचित कनेक्शन – Anthony

+0

फिर एक 'grep -rn2 sockaddr/usr/include' व्यावहारिक रूप से पर्याप्त है (यदि सभी विकास संकुल-जैसे' libc6-dev' आदि ...- स्थापित किए गए हैं)। –

2

मैन-पेज केवल मानव द्वारा लिखी गई फाइलें हैं या मानव की इच्छा से उत्पन्न होती हैं। आम तौर पर उन सभी कार्यों के साथ मानव-पृष्ठों में सभी संबंधित संरचनाओं का उल्लेख किया जाता है। कभी-कभी आप हेडर-फाइलों के लिए पेज पा सकते हैं (time.h(0p))। कभी-कभी पूरे पुस्तकालयों के लिए पृष्ठ होते हैं (libsensors(3))। कभी-कभी संरचनाओं के लिए वास्तविक पृष्ठ होते हैं (XAnyEvent(3))।

आप apropos और whatis देख सकते हैं। कभी-कभी वे जो खोज रहे हैं उससे संबंधित पेज ढूंढने में सक्षम होते हैं।

echo '#include <netinet/in.h>' | gcc -E - | less 

कौन सा प्रासंगिक हित के उत्पन्न करता है:

6
किसी भी शीर्ष लेख के लिए

# 225 "/usr/include/netinet/in.h" 3 4 
struct sockaddr_in 
    { 
    sa_family_t sin_family; 
    in_port_t sin_port; 
    struct in_addr sin_addr; 


    unsigned char sin_zero[sizeof (struct sockaddr) - 
     (sizeof (unsigned short int)) - 
     sizeof (in_port_t) - 
     sizeof (struct in_addr)]; 
    }; 

यह एक पूर्वप्रक्रमक विकल्प के साथ किसी भी संकलक उपयोग किया जा सकता है (हर सी संकलक मैं के बारे में पता यह कर सकते हैं)।

echo '#include <netinet/in.h>' | gcc -E - | less 

कौन सा प्रासंगिक हित के उत्पन्न करता है:

1
किसी भी शीर्ष लेख के लिए

# 225 "/usr/include/netinet/in.h" 3 4 
struct sockaddr_in 
    { 
    sa_family_t sin_family; 
    in_port_t sin_port; 
    struct in_addr sin_addr; 


    unsigned char sin_zero[sizeof (struct sockaddr) - 
     (sizeof (unsigned short int)) - 
     sizeof (in_port_t) - 
     sizeof (struct in_addr)]; 
    }; 

यह एक पूर्वप्रक्रमक विकल्प के साथ किसी भी संकलक उपयोग किया जा सकता है (हर सी संकलक मैं के बारे में पता यह कर सकते हैं)। sockaddr_in के लिए मैन पेज IP(7) है।

4

मुझे थोड़ा देर हो चुकी है लेकिन प्रासंगिक संरचना ip के मैन पेज में पाई जा सकती है, आपको थोड़ा नीचे स्क्रॉल करना होगा।जैसे -

> man ip पैदावार

Address format 
     An IP socket address is defined as a combination of an IP interface address and a 16-bit 
     port number. The basic IP protocol does not supply port numbers, they are implemented 
     by higher level protocols like udp(7) and tcp(7). On raw sockets sin_port is set to the 
     IP protocol. 

      struct sockaddr_in { 
       sa_family_t sin_family; /* address family: AF_INET */ 
       in_port_t  sin_port; /* port in network byte order */ 
       struct in_addr sin_addr; /* internet address */ 
      }; 

      /* Internet address. */ 
      struct in_addr { 
       uint32_t  s_addr;  /* address in network byte order */ 
      }; 

सिर्फ संबंधित आदमी पृष्ठों के लिए खोज और आप अपने संदर्भ के लिए जानकारी की विविधता मिल जाएगा।

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

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