আমি কীভাবে জানতে পারি কোনটি 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একটি সি হেডার ফাইল; জাভা এর সাথে কী করার আছে?
রিকার্ডো মুরি

@ রিকার্ডো আমি এমন কিছু সিস্টেম কল করতে চাই, যেগুলি সেই ফাইলে সংজ্ঞায়িত করা হয়েছে।
সান্টিয়াগো.বাসুল্টো

@ user1531 শিরোনাম ফাইলগুলি সংকলনের প্রথম ধাপ হিসাবে অন্তর্ভুক্ত করা হয়েছে, সুতরাং রানটাইমের সময় তাদের প্রয়োজন হয় না (আপনি এমন কোনও সিস্টেমে কোড চালাতে পারেন যার কোনও সংকলক বা বিকাশের পরিবেশ ইনস্টল নেই)। জাভা থেকে সি ফাংশন কল করা সম্পূর্ণ ভিন্ন প্রশ্নের জন্য একটি বিষয় - যা আপনি ইতিমধ্যে জিজ্ঞাসা করেছেন বলে মনে হয় :-)
রিকার্ডো মুরি

উত্তর:


12

gccফাইলগুলি অন্তর্ভুক্ত করার জন্য সংকলকটি অনুসরণ করার সঠিক নিয়মগুলি এখানে ব্যাখ্যা করা হয়েছে: http://gcc.gnu.org/onlinesocs/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লাইনগুলি গ্রিপ করতে পারেন :

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

আমার উবুন্টু 10.04 / জিসিসি 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। এছাড়াও, যদি আপনি একটি সি ++ উৎস সংকলন, আপনি প্রতিস্থাপন করা উচিত -x cসঙ্গে -x c++

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.