test_mount.rs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536
  1. use core::ffi::{c_char, c_void};
  2. use errno::errno;
  3. use libc::{mount, MS_BIND};
  4. use std::fs;
  5. use std::path::Path;
  6. use std::time;
  7. fn main() {
  8. let path = Path::new("mnt/tmp");
  9. let dir = fs::create_dir_all(path);
  10. if dir.is_err() {
  11. panic!("mkdir /mnt/tmp fail.");
  12. }
  13. let clock = time::Instant::now();
  14. let source = b"\0".as_ptr() as *const c_char;
  15. let target = b"/mnt/tmp\0".as_ptr() as *const c_char;
  16. let fstype = b"ramfs\0".as_ptr() as *const c_char;
  17. let flags = MS_BIND;
  18. let data = std::ptr::null() as *const c_void;
  19. let _result = unsafe { mount(source, target, fstype, flags, data) };
  20. let path = Path::new("mnt/tmp/tmp");
  21. let dir = fs::create_dir_all(path);
  22. if dir.is_err() {
  23. panic!("mkdir /mnt/tmp/tmp fail.");
  24. }
  25. let target = b"/mnt/tmp/tmp\0".as_ptr() as *const c_char;
  26. let result = unsafe { mount(source, target, fstype, flags, data) };
  27. if result == 0 {
  28. println!("Mount successful");
  29. } else {
  30. let err = errno();
  31. println!("Mount failed with error code: {}", err.0);
  32. }
  33. let dur = clock.elapsed();
  34. println!("mount costing time: {} ns", dur.as_nanos());
  35. }