이번 장에서는 Rust에서 중요한 콘텐츠 IO 입출력 에 대해 이야기하겠습니다 . 이것이 Rust 언어가 키보드와 같은 표준 입력으로부터 데이터를 읽고 읽은 데이터를 표시하는 방식입니다.
이 장에서는 Rust 언어 IO 입력 및 출력의 세 가지 주요 부분인 표준 입력에서 데이터 읽기 , 표준 출력에 데이터 쓰기 , 명령줄 매개변수를 간략하게 소개합니다 .
Rust 표준 라이브러리는 두 가지 특성(Trait)을 통해 IO 입력과 출력을 구성합니다.
특성 | 설명 | 예시 |
read | 입력 스트림에서 바이트 데이터를 읽는 다양한 방법이 포함되어 있습니다. | stdin, file |
write | 바이트 데이터 및 UTF-8 데이터 형식을 포함하여 출력 스트림에 데이터를 쓰는 다양한 방법이 포함되어 있습니다. | stdout, file |
Read 특성은 입력 스트림에서 바이트를 읽는 구성요소입니다. 입력 스트림에는 표준 입력, 키보드, 마우스, 명령줄, 파일 등이 포함됩니다.
Read 특성의 read_line() 메서드는 입력 스트림에서 문자열 데이터 한 줄을 읽는 데 사용됩니다. 관련정보는 다음과 같습니다
특성 | 설명 |
Read read_line(&mut line)->Result | 입력 스트림에서 문자열 데이터 라인을 읽고 이를 line 매개변수에 저장합니다. 결과 열거형을 반환하거나, 성공한 경우 읽은 바이트 수를 반환합니다. |
Rust 프로그램은 런타임에 사용자 입력 데이터를 받을 수 있습니다.
수신 방법은 표준 입력 스트림(일반적으로 키보드)에서 사용자 입력을 읽는 것입니다.
다음 코드는 표준 입력 스트림/명령줄에서 사용자 입력을 읽고 표시합니다.
위의 Rust 코드를 컴파일하고 실행하면 출력 결과는 다음과 같습니다.
표준 라이브러리에서 제공하는 std::io::stdin()은 현재 프로세스의 표준 입력 스트림 stdin에 대한 핸들을 반환합니다.
Read_line()은 표준 입력 스트림에서 데이터 한 줄을 읽는 데 사용되는 표준 입력 스트림 stdin의 핸들에 대한 메서드입니다.
read_line() 메서드의 반환 값은 Result 열거형이고 unwrap()은 복구 가능한 오류 처리를 단순화하는 도우미 메서드입니다. Result에 저장된 실제 값을 반환합니다.
참고: read_line() 메서드는 줄 끝의 개행 문자를 자동으로 제거합니다.\n
Write 특성은 출력 스트림에 바이트를 쓰는 데 사용되는 구성요소입니다. 출력 스트림에는 표준 출력, 명령줄, 파일 등이 포함됩니다.
Write 특성의 write() 메소드는 실제 출력 작업을 완료합니다. 관련정보는 다음과 같습니다
|Trait Trait|Method|Description| 쓰기| write(&buf) -> Result| 매개변수 buf의 바이트 전체 또는 일부를 기본 스트림에 씁니다. 결과 열거형을 반환하거나, 성공한 경우 쓴 바이트 수를 반환합니다. |
참고: write() 메서드는 출력 끝에 개행 문자 \n을 자동으로 추가하지 않습니다. 개행 문자가 필요한 경우 수동으로 추가해야 합니다.
우리가 이전에 수없이 사용했던 print!() 매크로와 println!() 매크로는 내용을 표준 출력에 쓸 수 있습니다.
하지만 이번에는 다른 작업을 수행합니다. 표준 라이브러리 std::io에서 제공하는 stdout().write() 메서드를 사용하여 콘텐츠를 출력합니다.
위의 Rust 코드를 컴파일하고 실행하면 출력 결과는 다음과 같습니다.
표준 라이브러리에서 제공하는 std::io::stdout()은 현재 프로세스의 표준 출력 스트림 stdout에 대한 핸들을 반환합니다.
Write()는 표준 출력 스트림 stdout의 핸들에 대한 메서드로, 표준 출력 스트림에 바이트 스트림 내용을 쓰는 데 사용됩니다.
write() 메서드의 반환 값은 Result 열거형이고 unwrap()은 복구 가능한 오류 처리를 단순화하는 도우미 메서드입니다. Result에 저장된 실제 값을 반환합니다.
참고: 다음 장에서 파일 관련 IO를 소개하겠습니다.
명령줄 매개변수는 프로그램이 실행되기 전에 터미널이나 명령줄 프롬프트 또는 셸을 통해 프로그램에 전달되는 매개변수입니다.
명령줄 인수는 함수에 전달되는 인수와 다소 유사합니다.
예를 들어, 우리가 이전에 수없이 보아왔던 main.exe가 있습니다. 매개변수를 전달하지 않고 실행하기 전에
그러나 실제로는 프로그램 사용 여부에 관계없이 일부 매개변수를 전달할 수 있습니다. 예를 들어 2019 및 Starting from Zero Egg Tutorial을 매개변수로 전달할 수 있습니다.
./main.exe 2019 처음부터 시작하기 튜토리얼 여러 매개변수를 전달하려면 여러 매개변수를 공백( ' ' )으로 구분해야 합니다. 매개변수에 공백이 있으면 매개변수를 큰따옴표(")로 묶어야 합니다.
Rust 언어에는 모든 명령줄 인수를 반환하는 표준 라이브러리에 내장된 std::env::args() 함수가 있습니다.
std::env::args()가 반환한 결과에는 프로그램 이름이 포함됩니다. 예를 들어, 위 명령에서 std::env::args()에 저장된 결과는 다음과 같습니다.
다음 코드에서는 std::env::args()를 반복하여 명령줄에 전달된 모든 인수를 출력합니다.
위의 Rust 코드를 컴파일하고 실행하면 출력 결과는 다음과 같습니다.
Cargo Build 명령을 사용하여 위 프로그램을 컴파일하면 main.exe 또는 main 실행 파일이 생성됩니다.
Rust 언어의 명령줄 매개변수는 다른 언어의 명령줄 매개변수와 동일합니다. 공백( ' ' )은 모든 매개변수를 구분하는 데 사용됩니다. 예를 들어 위에서 전달한 1 Tutorial from Scratch 3 Simple 프로그래밍은 공백을 사용하여 4개의 매개변수["1", "Tutorial from Scratch", "3", "Simple 프로그래밍"]으로 구분됩니다.
그러나 실제로 std::env::args()는 5개의 매개변수를 저장하고 첫 번째 매개변수는 현재 프로그램 이름입니다.
프로그램 이름은 현재 실행 디렉터리와 동일합니다.
다음 코드는 명령줄에서 공백으로 구분된 여러 매개변수를 읽고 이러한 매개변수의 합계를 계산합니다.
위의 Rust 코드를 컴파일하고 실행하면 출력 결과는 다음과 같습니다.
25. Rust Cargo 패키지 관리자 (0) | 2024.12.22 |
---|---|
24. Rust 파일 읽기 및 쓰기 (0) | 2024.12.22 |
22. Rust 제네릭 (0) | 2024.12.21 |
21. Rust 오류 처리 (0) | 2024.12.21 |
20. Rust 컬렉션 (0) | 2024.12.14 |