fs.rs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. use crate::{
  2. filesystem::vfs::{file::FileMode, FilePrivateData, IndexNode, Metadata},
  3. libs::spinlock::SpinLockGuard,
  4. };
  5. use alloc::sync::Arc;
  6. use alloc::vec::Vec;
  7. use system_error::SystemError;
  8. use super::event_poll::LockedEventPoll;
  9. /// ### 该结构体将Epoll加入文件系统
  10. #[derive(Debug)]
  11. pub struct EPollInode {
  12. pub epoll: LockedEventPoll,
  13. }
  14. impl EPollInode {
  15. pub fn new(epoll: LockedEventPoll) -> Arc<Self> {
  16. Arc::new(Self { epoll })
  17. }
  18. }
  19. impl IndexNode for EPollInode {
  20. fn read_at(
  21. &self,
  22. _offset: usize,
  23. _len: usize,
  24. _buf: &mut [u8],
  25. _data: SpinLockGuard<FilePrivateData>,
  26. ) -> Result<usize, SystemError> {
  27. Err(SystemError::ENOSYS)
  28. }
  29. fn write_at(
  30. &self,
  31. _offset: usize,
  32. _len: usize,
  33. _buf: &[u8],
  34. _data: SpinLockGuard<FilePrivateData>,
  35. ) -> Result<usize, SystemError> {
  36. Err(SystemError::ENOSYS)
  37. }
  38. fn fs(&self) -> Arc<dyn crate::filesystem::vfs::FileSystem> {
  39. todo!()
  40. }
  41. fn as_any_ref(&self) -> &dyn core::any::Any {
  42. self
  43. }
  44. fn list(&self) -> Result<Vec<alloc::string::String>, SystemError> {
  45. Err(SystemError::ENOSYS)
  46. }
  47. fn metadata(&self) -> Result<Metadata, SystemError> {
  48. Ok(Metadata::default())
  49. }
  50. fn close(&self, _data: SpinLockGuard<FilePrivateData>) -> Result<(), SystemError> {
  51. // 释放资源
  52. let mut epoll = self.epoll.0.lock_irqsave();
  53. epoll.close()?;
  54. Ok(())
  55. }
  56. fn open(
  57. &self,
  58. _data: SpinLockGuard<FilePrivateData>,
  59. _mode: &FileMode,
  60. ) -> Result<(), SystemError> {
  61. Ok(())
  62. }
  63. }