1#[cfg(not(any(
2    target_os = "ios",
3    target_os = "macos",
4    target_os = "redox",
5    target_os = "wasi",
6)))]
7#[test]
8fn test_mknodat() {
9    use rustix::fs::{cwd, mknodat, openat, statat, unlinkat, AtFlags, FileType, Mode, OFlags};
10
11    let tmp = tempfile::tempdir().unwrap();
12    let dir = openat(cwd(), tmp.path(), OFlags::RDONLY, Mode::empty()).unwrap();
13
14    // Create a regular file. Not supported on FreeBSD or OpenBSD.
15    #[cfg(not(any(target_os = "freebsd", target_os = "openbsd", target_os = "solaris")))]
16    {
17        mknodat(&dir, "foo", FileType::RegularFile, Mode::empty(), 0).unwrap();
18        let stat = statat(&dir, "foo", AtFlags::empty()).unwrap();
19        assert_eq!(FileType::from_raw_mode(stat.st_mode), FileType::RegularFile);
20        unlinkat(&dir, "foo", AtFlags::empty()).unwrap();
21    }
22
23    mknodat(&dir, "foo", FileType::Fifo, Mode::empty(), 0).unwrap();
24    let stat = statat(&dir, "foo", AtFlags::empty()).unwrap();
25    assert_eq!(FileType::from_raw_mode(stat.st_mode), FileType::Fifo);
26    unlinkat(&dir, "foo", AtFlags::empty()).unwrap();
27}
28