Làm thế nào tôi có thể biết tập tin unistd.h nào được tải?


11

Tôi có một số unistd.htệp trong Ubuntu Linux của mình. Tôi đã có một trên /usr/include/asm/unistd.h. Tập tin này có chỉ thị này:

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

Trong thư mục đó, tôi có thể tìm thấy các tệp đó ( unistd_32.hunistd_64.h).

Nhưng trong /usr/src/linux-headers-2.6.31-22/include/asm-generic/một unistd.hđiều khác bắt đầu với chỉ thị này:

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

Vì vậy, câu hỏi là: Làm thế nào tôi có thể biết cái nào được tải? Có cách nào để kiểm tra nó trong thời gian chạy với Java không?


1
Tôi không hiểu nửa sau câu hỏi của bạn: unistd.hlà tệp tiêu đề C; Nó có liên quan gì với Java?
Riccardo Murri

@Riccardo Tôi muốn thực hiện một số Cuộc gọi hệ thống, được xác định trong tệp đó.
santiago.basulto

@ user1531 Các tệp tiêu đề được bao gồm như là bước đầu tiên của quá trình biên dịch, vì vậy chúng không cần thiết trong thời gian chạy (bạn có thể chạy mã trên hệ thống không cài đặt trình biên dịch hoặc môi trường phát triển). Gọi các hàm C từ Java là một chủ đề cho một câu hỏi hoàn toàn khác - mà dường như bạn đã hỏi :-)
Riccardo Murri

Câu trả lời:


12

Các quy tắc chính xác được theo sau bởi gcctrình biên dịch để tìm tệp bao gồm được giải thích tại: http://gcc.gnu.org/onlinesocs/cpp/Search-Path.html

Thủ thuật dòng lệnh nhanh để tìm ra tệp bao gồm từ đâu là: 1

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

Sau đó, nếu bạn nhìn vào unistd.preprocessedtệp, bạn sẽ thấy các dòng như:

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

Chúng cho bạn biết rằng khối dòng sau (cho đến # number ...dòng tiếp theo ) đến từ tệp /usr/include/unistd.h.

Vì vậy, nếu bạn muốn biết danh sách đầy đủ các tệp được bao gồm, bạn có thể grep cho các # numberdòng:

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

Trên hệ thống Ubuntu 10.04 / gcc 4.4.3 của tôi, điều này tạo ra:

$ 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 Lưu ý: Đường dẫn tìm kiếm tệp bao gồm được sửa đổi bằng -Itùy chọn dòng lệnh; vì vậy, bạn nên thêm bất kỳ -I path đối số nào vào gcclời gọi. Ngoài ra, nếu bạn đang biên dịch một nguồn C ++, bạn nên thay thế -x cbằng -x c++.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.