मुझे कैसे पता चलेगा कि कौन सी unistd.h फ़ाइल लोड है?


11

unistd.hमेरे उबंटू लिनक्स में कई फाइलें हैं। मैं एक पर हूँ /usr/include/asm/unistd.h। इस फ़ाइल में यह निर्देश हैं:

# ifdef __i386__
#  include "unistd_32.h"
# else
#  include "unistd_64.h"
# endif

उस फ़ोल्डर में, मैं उन फ़ाइलों ( unistd_32.hऔर unistd_64.h) को ढूंढ सकता हूं ।

लेकिन /usr/src/linux-headers-2.6.31-22/include/asm-generic/वहाँ एक और है unistd.hकि इस निर्देश के साथ शुरू होता है:

#if !defined(_ASM_GENERIC_UNISTD_H) || defined(__SYSCALL)
#define _ASM_GENERIC_UNISTD_H

तो, सवाल यह है: मैं कैसे जान सकता हूं कि कौन सा लोड किया गया है? क्या जावा के साथ रनटाइम में इसकी जांच करने का कोई तरीका है?


1
मैं आपके प्रश्न के उत्तरार्ध को नहीं समझता: unistd.hसी हेडर फ़ाइल है; यह जावा के साथ क्या करने के लिए मिल गया है?
रिकार्डो मुरी

@ रिचर्डक मैं कुछ सिस्टम कॉल करना चाहूंगा, जो उस फाइल में परिभाषित हैं।
santiago.basulto

@ user1531 हेडर फ़ाइलों को संकलन के पहले चरण के रूप में शामिल किया गया है, इसलिए उन्हें रनटाइम पर जरूरत नहीं है (आप एक सिस्टम पर कोड चला सकते हैं जिसमें कोई संकलक या विकास वातावरण स्थापित नहीं है)। जावा से C फ़ंक्शन को कॉल करना पूरी तरह से अलग प्रश्न के लिए एक विषय है - जो आपको पहले से ही पूछा गया प्रतीत होता है :-)
रिकार्डो मुरी

जवाबों:


12

gccकंपाइलर द्वारा खोज की गई फ़ाइलों में शामिल सटीक नियमों का पालन किया गया है : http://gcc.gnu.org/onbuildocs/cpp/Search-Path.html

एक त्वरित कमांड-लाइन ट्रिक यह पता लगाने के लिए कि एक सम्मिलित फ़ाइल कहाँ से आती है, निम्नलिखित है: 1

echo '#include <unistd.h>' | gcc -E -x c - > unistd.preprocessed

फिर, यदि आप unistd.preprocessedफ़ाइल को देखते हैं, तो आप लाइनों को नोटिस करेंगे जैसे:

# 1 "/usr/include/unistd.h" <some numbers>

ये आपको बताते हैं कि निम्न खंड (अगली # number ...पंक्ति तक ) फ़ाइल से आते हैं/usr/include/unistd.h

इसलिए, यदि आप शामिल फ़ाइलों की पूरी सूची जानना चाहते हैं, तो आप # numberलाइनों के लिए grep कर सकते हैं:

echo '#include <unistd.h>' | gcc -E -x c - | egrep '# [0-9]+ ' | awk '{print $3;}' | sort -u*emphasized text*

मेरे Ubuntu 10.04 / gcc 4.4.3 सिस्टम पर, यह उत्पादन करता है:

$ echo '#include <unistd.h>' | gcc -E -x c - | egrep '# [0-9]+ ' | awk '{print $3;}' | sort -u
"<built-in>"
"<command-line>"
"<stdin>"
"/usr/include/bits/confname.h"
"/usr/include/bits/posix_opt.h"
"/usr/include/bits/predefs.h"
"/usr/include/bits/types.h"
"/usr/include/bits/typesizes.h"
"/usr/include/bits/wordsize.h"
"/usr/include/features.h"
"/usr/include/getopt.h"
"/usr/include/gnu/stubs-64.h"
"/usr/include/gnu/stubs.h"
"/usr/include/sys/cdefs.h"
"/usr/include/unistd.h"
"/usr/lib/gcc/x86_64-linux-gnu/4.4.3/include/stddef.h"

1 नोट: शामिल फ़ाइलों के लिए खोज पथ को -Iकमांड-लाइन विकल्प द्वारा संशोधित किया गया है; इसलिए, आपको आह्वान में कोई -I path तर्क जोड़ना चाहिए gcc। इसके अलावा, यदि आप C ++ स्रोत संकलित कर रहे हैं, तो आपको इसके -x cसाथ स्थानापन्न होना चाहिए -x c++

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.