]>
git.proxmox.com Git - rustc.git/blob - src/test/ui/stdio-is-blocking.rs
2 // ignore-cloudabi no processes
3 // ignore-emscripten no processes
4 // ignore-sgx no processes
7 use std
::io
::prelude
::*;
8 use std
::process
::Command
;
11 const THREADS
: usize = 20;
12 const WRITES
: usize = 100;
13 const WRITE_SIZE
: usize = 1024 * 32;
16 let args
= env
::args().collect
::<Vec
<_
>>();
25 let me
= env
::current_exe().unwrap();
26 let mut cmd
= Command
::new(me
);
27 cmd
.arg("run-the-test");
28 let output
= cmd
.output().unwrap();
29 assert
!(output
.status
.success());
30 assert_eq
!(output
.stderr
.len(), 0);
31 assert_eq
!(output
.stdout
.len(), WRITES
* THREADS
* WRITE_SIZE
);
32 for byte
in output
.stdout
.iter() {
33 assert_eq
!(*byte
, b'a'
);
38 let threads
= (0..THREADS
).map(|_
| {
40 let buf
= [b'a'
; WRITE_SIZE
];
45 }).collect
::<Vec
<_
>>();
47 for thread
in threads
{
48 thread
.join().unwrap();
53 fn write_all(buf
: &[u8]) {
56 use std
::os
::unix
::prelude
::*;
58 let mut file
= unsafe { File::from_raw_fd(1) }
;
59 let res
= file
.write_all(buf
);
65 fn write_all(buf
: &[u8]) {
68 use std
::os
::windows
::raw
::*;
69 use std
::os
::windows
::prelude
::*;
71 const STD_OUTPUT_HANDLE
: u32 = (-11i32) as u32;
74 fn GetStdHandle(handle
: u32) -> HANDLE
;
77 let mut file
= unsafe {
78 let handle
= GetStdHandle(STD_OUTPUT_HANDLE
);
79 assert
!(!handle
.is_null());
80 File
::from_raw_handle(handle
)
82 let res
= file
.write_all(buf
);