Mỗi quá trình có một bảng mô tả tệp (FDT) và mỗi tệp có một bộ mô tả tệp. Các bộ mô tả tệp cho stdin, stdout và stderr là 0,1 và 2. Các giá trị này giống nhau cho tất cả các quy trình. FDT mà tôi tin có chứa các tham chiếu đến các mục INODE của các tệp đó. Các mô tả tệp được sử dụng lại trên các quy trình, nghĩa là chúng không phải là duy nhất trên toàn cầu. Có một FDT toàn cầu được duy trì bởi hạt nhân mà mỗi tài liệu FDT tham chiếu? FDT cho stdin, stdout và stderr tương ứng với điều gì? Các tệp đặc biệt này có được liên kết với bàn phím, hiển thị, v.v. Vui lòng cung cấp liên kết đến các bài viết, sách, v.v.Trợ giúp với các bộ mô tả tệp trong Unix
Trả lời
Điểm khởi đầu tốt là bài viết "A small trail through the Linux kernel" từ năm 2001. Cơ chế vẫn tương tự, mặc dù việc triển khai đã được tiến hành và được nghiên cứu tốt nhất trong a more recent kernel.
Bên trong hạt nhân, mỗi bộ mô tả tệp mở tương ứng với struct file
, chứa tất cả thông tin về tệp hoặc thiết bị đang mở. Bộ mô tả tệp thực sự không chỉ là một chỉ mục trong FDT cho quá trình. Trong hạt nhân Linux, struct file
được gắn vào FDT bằng hàm fd_install()
. struct file
có thể được gán lại cho một bộ mô tả tập tin khác theo số dup2
system call.
Quá trình có thể chia sẻ cùng một FDT nếu các quá trình được tạo bởi cuộc gọi hệ thống clone
với cờ CLONE_FILES
, nhưng không có FDT toàn cầu. Hoạt động bình thường fork
tạo một FDT mới là bản sao của FDT gốc. Việc sử dụng thực tế của điều này là cho mỗi thread của một ứng dụng đa luồng là một quá trình nhân bản chia sẻ một FDT chung, đảm bảo rằng tất cả các chủ đề có thể sử dụng cùng một mô tả tập tin số nguyên. Nếu bạn tạo quy trình mới bằng cách sử dụng fork
/exec
, quy trình mới bắt đầu bằng cùng một bộ mô tả tệp nhưng có thể mở và đóng tệp mà không ảnh hưởng đến cha mẹ.
Các mục FDT cho stdin, stdout, stderr được thừa kế từ cấp độ gốc. Không có gì đặc biệt về việc thực hiện hạt nhân của chúng trong ba mục FDT này; ý nghĩa của chúng xuất phát từ việc sử dụng thông thường của thư viện C. Quá trình cha mẹ một mình quyết định những gì họ được kết nối với. Chúng có thể kết nối với các thiết bị ký tự hoặc chúng có thể được kết nối với các tệp hoặc các đường ống. Đối với trường hợp thiết bị ký tự, bình thường nhất là thiết bị tty hoặc pty. Cuốn sách miễn phí Linux Device Drivers có a good overview trong số này.
- 1. Bộ mô tả ổ cắm và tệp
- 2. Thay đổi kích thước bộ mô tả tệp trong httperf
- 3. Gửi mô tả tệp trên ổ cắm miền UNIX và chọn()
- 4. Cách mở lại một bộ mô tả tệp đã đóng
- 5. Trợ giúp với định dạng tệp dữ liệu WordNet
- 6. bắc cầu giữa hai bộ mô tả tệp
- 7. Lấy bộ mô tả tệp được phân bổ cao nhất
- 8. Các bộ mô tả/trang trí làm tổ trong python
- 9. Tôi có hiểu cách các trình mô tả tập tin Unix hoạt động trong C không?
- 10. Trợ giúp với Dispatcher.BeginInvoke
- 11. ndk-stack: Không thể mở tệp biểu tượng .../../libutil.so. Lỗi (9): Bộ mô tả tệp sai
- 12. Trợ giúp với Java Multithreading
- 13. Trợ giúp tải lên tệp Spring MVC
- 14. Trợ giúp với bộ chọn JQuery: không (: last)
- 15. Trợ giúp chuyển nhượng: Liên kết giữa các bộ
- 16. Trợ giúp với câu lệnh SQL (JOIN)
- 17. Sử dụng bộ mô tả tệp được đánh số từ Java
- 18. Vim (Windows) - các tệp trợ giúp mới không hoạt động
- 19. Phương pháp phổ biến trong mô hình và trợ giúp
- 20. Trợ giúp với các nhà tích hợp symplectic
- 21. Tệp trợ giúp của Windows - các tùy chọn là gì?
- 22. Hướng dẫn Vật lý Farseer, Các tệp trợ giúp
- 23. Cần trợ giúp tạo tệp cài đặt
- 24. Magento - tạo một lớp trợ giúp
- 25. Điều gì sẽ xảy ra với các bộ mô tả tệp trong Python 3 khi .close() không thành công?
- 26. trợ giúp với tệp kiến - classpath cho tác vụ Java
- 27. Không bao gồm các gói từ các lọ trong bộ mô tả lắp ráp maven
- 28. Rails xem người trợ giúp trong tập tin trợ giúp
- 29. Sự khác nhau giữa các tệp trợ giúp và các tệp lib trong đường ray
- 30. Các bộ mô tả tệp có được chia sẻ khi fork() ing không?
Ở cuối đoạn 3, tôi nghĩ bạn có nghĩa là quy trình con có thể mở và đóng tệp * mà không * ảnh hưởng đến phụ huynh –