Vì câu trả lời này vẫn được bình chọn, tôi muốn chỉ ra rằng bạn hầu như không bao giờ cần phải tìm trong tệp tiêu đề. Nếu bạn muốn viết mã đáng tin cậy, bạn sẽ phục vụ tốt hơn bằng cách xem xét tiêu chuẩn. Một câu hỏi hay hơn "cách off_t
được xác định trên máy của tôi" là "cách off_t
được xác định theo tiêu chuẩn?". Theo tiêu chuẩn có nghĩa là mã của bạn sẽ hoạt động ngày hôm nay và ngày mai, trên bất kỳ máy nào.
Trong trường hợp này, off_t
không được xác định theo tiêu chuẩn C. Đó là một phần của tiêu chuẩn POSIX, trong đó you can browse here.
Thật không may, off_t
không được xác định rất chặt chẽ. Tất cả tôi có thể tìm để xác định nó là trên trang trên sys/types.h
:
blkcnt_t
và off_t
được ký kiểu số nguyên.
Điều này có nghĩa là bạn không thể chắc chắn nó lớn như thế nào. Nếu bạn đang sử dụng GNU C, bạn có thể sử dụng các hướng dẫn trong the answer below để đảm bảo rằng nó là 64 bit. Hoặc tốt hơn, bạn có thể chuyển đổi thành kích thước được xác định tiêu chuẩn trước khi đặt nó lên dây. Đây là cách các dự án như công việc của Protocol Buffers của Google (mặc dù đó là dự án C++).
Vì vậy, tôi nghĩ "tôi tìm định nghĩa trong tệp tiêu đề của mình ở đâu" không phải là câu hỏi hay nhất. Nhưng, để hoàn thành, đây là câu trả lời:
Bạn sẽ tìm thấy định nghĩa trong bits/types.h
(như nhận xét ở trên cùng, không bao giờ trực tiếp bao gồm tệp này), nhưng nó bị che khuất một chút trong một loạt các macro. Một thay thế cho cố gắng để làm sáng tỏ họ là nhìn vào sản lượng tiền xử lý:
#include <stdio.h>
#include <sys/types.h>
int main(void) {
off_t blah;
return 0;
}
Và sau đó:
$ gcc -E sizes.c | grep __off_t
typedef long int __off_t;
....
Tuy nhiên, nếu bạn muốn biết kích thước của một cái gì đó, bạn luôn có thể sử dụng sizeof()
nhà điều hành.
Chỉnh sửa: Chỉ cần nhìn thấy một phần câu hỏi của bạn về số __
. This answer has a good discussion. Điểm mấu chốt là tên bắt đầu bằng __
được dành riêng cho việc triển khai (vì vậy bạn không nên bắt đầu định nghĩa của riêng mình với __
).
Bất cứ điều gì bắt đầu với '__' được dành riêng để sử dụng thực hiện (trừ khi tiêu chuẩn định nghĩa một ý nghĩa cho nó, như trong '__func__' hoặc' __FILE__'). Mức độ vô hướng cho phép thực hiện xác định kiểu của riêng nó '__off_t' mà không can thiệp vào bất cứ điều gì bạn có thể làm một cách hợp pháp. Các bit cụ thể nền tảng của các tiêu đề sau đó có thể được ẩn tốt hơn (do đó, một bản sao của mã nguồn có thể xử lý các bản biên dịch 32 bit và 64 bit trên một máy đơn lẻ). Đọc tiêu đề chuẩn là một công việc chính vì có quá nhiều định nghĩa liên kết với nhau. –