tôi đang chơi một chút với xv6, một thực hiện hiện đại của Unix phiên bản 6.Tại sao iget() ẩn trong xv6
Đối với thuê đầu tiên của tôi, tôi muốn thực hiện getcwd
syscall đơn giản, nhưng tôi một chút bị mất theo mức độ trừu tượng mà tôi nên sử dụng.
- Tôi có nên sử dụng giao diện
struct file
không? - Hoặc có thể giao diện
struct inode
? - Đối với những gì quan trọng, có vẻ như nó thậm chí có thể được triển khai hoàn toàn trong vùng đất người dùng.
Tôi đã bắt đầu triển khai nó với các thao tác struct inode
. Ý tưởng ngây thơ của tôi là lấy proc->cwd
, sau đó readi()
mục nhập thứ hai của nó (..
), quét nó để truy xuất inum
trước đó của tôi, và cứ thế cho đến khi tôi nhấn gốc.
Có vẻ như không thực sự lắm, nhưng điều đó sẽ phù hợp với lần hack đầu tiên.
Vấn đề của tôi là tôi cần fs.c:iget()
để truy xuất số struct inode
từ số inum
tôi nhận được trong số dirent
s. Tôi đã nhận thấy rằng iget()
là tĩnh trong fs.c
và không được khai báo trong defs.h
làm tôi khó chịu một chút, nhưng tôi không thể tìm thấy lý do tại sao.
Vì vậy, đây là câu hỏi của tôi. Tại sao nó iget()
được cố ý ẩn khỏi phần còn lại của hạt nhân?
Tôi nghĩ bạn thực sự nên thử http://unix.stackexchange.com/ cho câu hỏi này. –
Cảm ơn lời khuyên. Tôi vừa tạo một bài đăng ở đó, nhưng tôi đoán nó ít được truy cập nhiều hơn so với luồng stackover chính. – NewbiZ
Đúng, nhưng tôi nghi ngờ hầu hết người dùng ở đây đang làm việc với Unix. Liên kết tới bài đăng khác của bạn: http://unix.stackexchange.com/questions/126261/why-is-iget-hidden-in-xv6 –