Hangi unistd.h dosyasının yüklü olduğunu nasıl bilebilirim?


11

unistd.hUbuntu Linux'umda birkaç dosya var . Bende bir tane var /usr/include/asm/unistd.h. Bu dosya şu direktiflere sahiptir:

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

Bu klasörde bu dosyaları ( unistd_32.hve unistd_64.h) bulabilirim .

Ancak bu yönergelerle başlayan /usr/src/linux-headers-2.6.31-22/include/asm-generic/başka bir unistd.hşey var :

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

Yani soru şu: Hangisinin yüklü olduğunu nasıl bilebilirim? Java ile çalışma zamanında kontrol etmenin herhangi bir yolu var mı?


1
Sorunuzun ikinci yarısını anlamıyorum: unistd.hbir C başlık dosyası; Java ile ne ilgisi var?
Riccardo Murri

@Riccardo Bu dosyada tanımlanan bazı Sistem Çağrıları yapmak istiyorum.
santiago.basulto

@ user1531 Başlık dosyaları derlemenin ilk adımı olarak dahil edilir, bu nedenle çalışma zamanında gerekli değildir (yüklü bir derleyici veya geliştirme ortamı olmayan bir sistemde kod çalıştırabilirsiniz). Java'dan C işlevlerini çağırmak tamamen farklı bir soru için bir konudur - zaten sormuş
gibisiniz

Yanıtlar:


12

gccDerleyicinin dosyaları bulmak için izlediği kuralların tamamı şu adreste açıklanmaktadır: http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html

Bir içerme dosyasının nereden geldiğini öğrenmek için hızlı bir komut satırı hilesi aşağıdadır: 1

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

Ardından, unistd.preprocesseddosyaya bakarsanız, aşağıdaki satırları fark edeceksiniz:

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

Bunlar, aşağıdaki satır bloğunun (bir sonraki # number ...satıra kadar ) dosyadan geldiğini söyler /usr/include/unistd.h.

Yani, dahil edilen dosyaların tam listesini bilmek istiyorsanız, # numbersatırlar için grep yapabilirsiniz :

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 sistemimde bu aşağıdakileri üretir:

$ 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 Not: İçerme dosyaları için arama yolu -Ikomut satırı seçeneği ile değiştirilir; bu nedenle çağrına herhangi bir -I path argüman eklemelisiniz gcc. Eğer bir C ++ kaynak derleme Ayrıca, eğer, sen değiştirmesi gerekir -x cile -x c++.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.