|
1 | 1 | use std::fs::File;
|
2 | 2 | use std::os::unix::fs::symlink;
|
3 | 3 | use std::os::unix::prelude::AsRawFd;
|
| 4 | +use std::path::Path; |
4 | 5 |
|
5 | 6 | use libc::{S_IFMT, S_IFLNK};
|
6 | 7 |
|
7 | 8 | use nix::fcntl;
|
8 |
| -use nix::sys::stat::{self, stat, fstat, lstat}; |
| 9 | +use nix::sys::stat::{self, stat, fstat, lstat, mknod}; |
9 | 10 | use nix::sys::stat::FileStat;
|
10 | 11 | use nix::Result;
|
11 | 12 | use tempdir::TempDir;
|
@@ -110,3 +111,28 @@ fn test_stat_fstat_lstat() {
|
110 | 111 | let fstat_result = fstat(link.as_raw_fd());
|
111 | 112 | assert_stat_results(fstat_result);
|
112 | 113 | }
|
| 114 | + |
| 115 | +fn assert_fifo(path: &Path) { |
| 116 | + let stats = stat(path).unwrap(); |
| 117 | + let typ = stat::SFlag::from_bits_truncate(stats.st_mode); |
| 118 | + assert!(typ == stat::S_IFIFO); |
| 119 | +} |
| 120 | + |
| 121 | +#[test] |
| 122 | +fn test_mknod() { |
| 123 | + let tempdir = TempDir::new("nix-test_mknodat").unwrap(); |
| 124 | + let mknod_fifo = tempdir.path().join("mknod"); |
| 125 | + |
| 126 | + mknod(&mknod_fifo, stat::S_IFIFO, stat::S_IRUSR, 0).unwrap(); |
| 127 | + assert_fifo(&mknod_fifo); |
| 128 | +} |
| 129 | + |
| 130 | +#[test] |
| 131 | +#[cfg(not(any(target_os = "ios", target_os = "macos")))] |
| 132 | +fn test_mknod_mknodat() { |
| 133 | + let tempdir = TempDir::new("nix-test_mknodat").unwrap(); |
| 134 | + let mknodat_fifo = tempdir.path().join("mknodat"); |
| 135 | + |
| 136 | + stat::mknodat(&0, &mknodat_fifo, stat::S_IFIFO, stat::S_IRUSR, 0).unwrap(); |
| 137 | + assert_fifo(&mknodat_fifo); |
| 138 | +} |
0 commit comments