563fb8e43d
Support F_DUPFD on stdin/stdout/stderr Enable `close`-ing stdin/stdout/stderr For `dup`, check if FD is `File` first If not, clone the appropriate standard IO stream Merge POSIX `close` and `dup` tests into same module Also, add assertion that `write` on a closed FD returns an error. Add `dup` as FileDescriptor trait fn Also: - Fix `close` so it drops `self` instead of reference to it - Remove FD clamping in insert_fd_with_min_fd, since FDs 0-2 can be closed Fix fs_libc tests Make error message when closing stdin/out/err more specific Return io::Result from `FileDescriptor::dup` Change error message when closing stdin/out/err Refactor `FileDescriptor::dup` impl for `FileHandle` Remove empty line
21 lines
529 B
Rust
21 lines
529 B
Rust
// ignore-windows
|
|
// compile-flags: -Zmiri-disable-isolation
|
|
|
|
#![feature(rustc_private)]
|
|
|
|
extern crate libc;
|
|
|
|
fn main() {
|
|
dup_stdout_stderr_test();
|
|
}
|
|
|
|
fn dup_stdout_stderr_test() {
|
|
let bytes = b"hello dup fd\n";
|
|
unsafe {
|
|
let new_stdout = libc::fcntl(1, libc::F_DUPFD, 0);
|
|
let new_stderr = libc::fcntl(2, libc::F_DUPFD, 0);
|
|
libc::write(new_stdout, bytes.as_ptr() as *const libc::c_void, bytes.len());
|
|
libc::write(new_stderr, bytes.as_ptr() as *const libc::c_void, bytes.len());
|
|
}
|
|
}
|