개인적으로 이 글을 읽기 위해서는 "병렬 처리 및 병렬 프로세스"에 관한 선행된 지식이 필요합니다.
https://doc.rust-lang.org/std/io/struct.Stdin.html
'a global buffer of input data to this process'에 대한 점유를 할 수 있는 핸들러를 가리킵니다.
핸들러는 병렬처리에 의한 자원 독점('lock')을 이용하여 'BufRead methods의 전체적인 접근 권한을 얻습니다.
해당 핸들러는 'the Read trait'을 제공하지만 병렬 처리에서의 Read는 유의해서 처리해야 합니다.
(병렬 처리에 있어서의 자원 점유를 위한) readable 가드를 반환하는 표준 핸들러, scope에서 벗어나면 해제된다.
추가적인 구성요소로 아래의 trait들을 제공함.
use std::io::{self, BufRead};
fn main() -> {
let mut buffer = String::new();
let stdin = io::stdin();
let mut handle = stdin.lock();
handle.read_line(&mut buffer).expect("Err: can't read");
}
이 메서드에서 문제가 발생하는 것 같다. 자원 공유에서의 blocking이 문제인가? 값이 제대로 할당되지 않는 문제로 계속 input이 실행된다.
// *Infinit loop*
io::stdin().read_to_string(&mut buf).expect("msg");
#![feature(stdio_locked)]
use std::io::{self, BufRead};
fn main() -> io::Result<()>{
let mut buffer= String::new();
let mut handle= io::stdin().into_locked();
handle.read_line(&mut buffer)?;
Ok(())
}
#![feature]
may not be used on the stable release channel
코드 실행이 안된다.lock
을 애용하자. // #86845
#![feature(stdin_forwarders)]
use std::io;
let lines = io::stdin().lines();
for line in lines {
println!("got a line: {}", line.unwrap());
}
stdin_forwarders
실행안됨. // #87096