2011-09-22 39 views
6

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

7

Đ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 Driversa good overview trong số này.

+1

Ở 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 –

Các vấn đề liên quan