Khi tôi đọc pg.176 của ngôn ngữ lập trình C theo K & R, tôi đã rất vui mừng. Tôi tìm thấy tất cả các thành viên của struct FILE (mà tôi đã tìm kiếm) và nó chỉ tuyệt vời để biết mọi thứ hoạt động như thế nào. Nhưng hãy đoán xem, gcc than phiền, lỗi: ‘FILE’ không có thành viên nào có tên ‘fd’. Nó có nghĩa là mọi thứ đã thay đổi ngay bây giờ, tôi googled nhưng không thể tìm thấy. Xin vui lòng giúp đỡ, cảm ơn bạn trước.Tôi muốn biết các thành viên nội bộ của struct FILE, những cái mới nhất
Tôi có thể sử dụng fileno() để lấy bộ mô tả tệp, nhưng tôi ghét làm việc ở mức trừu tượng.
int
main (int argc, char **argv){
FILE *fp = fopen ("ct.c", "r");
printf ("%i", fp->fd);
return 0;
}
Hãy cho chúng tôi một số mã để xem bạn đang ở đâu sai – 3wic
Nếu bạn thực sự muốn biết cách hoạt động, hãy đọc nguồn của libc (https://www.gnu.org/software/libc/). Việc biết các thành viên sẽ không phải là tất cả những gì hữu ích dưới một mức độ bề ngoài. Ngoài ra, bạn có thể không thấy bất kỳ thành viên nào của FILE * bởi vì nó là một con trỏ mờ đục. https://en.wikipedia.org/wiki/Opaque_pointer Không có lý do gì để tiêu thụ mã để biết những gì có trong FILE *, vậy tại sao lại khiến họ có khả năng? Tóm tắt là tốt. Nếu bạn đang sử dụng FILE :: fd và họ đã quyết định thay đổi tên của nó, mã của bạn sẽ bị hỏng. Nếu bạn đang sử dụng fileno, không có gì phá vỡ. – Corbin
@Corbin cảm ơn bạn vì những liên kết này, vâng trừu tượng là tốt khi bạn viết mã nhưng không phải khi bạn muốn hiểu một số nội dung: D – dimSutar