diff --git a/README.md b/README.md index e117cba0d5d1f029a970f9d0da785c207b01ce3f..771b35be502172784258d8dd96952550232b57c7 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,120 @@ # battle_c +## BeumSoo Heo - Team 2 + +실전코딩2 실습 + + ## My Printf HW -use fprintf with stderr stdout stdin +use fprintf with stderr stdout stdin & Redirection -### BeumSoo Heo - Team 2 +### Redirection을 통한 파일 입출력 -실전코딩2 실습 +<p> +일반적으로 command로 실행되는 process는 표준 입력 스트림(standard input stream), 표준 출력 스트림(standard output stream)과 오류 출력 스트림(standard error stream) +을 가지고 있다. 기본적으로 이 모든 스트림은 일반적인 문자열로 콘솔(console)에 출력한다. +그런데 우리는 프로그램의 실행 결과나 에러를 console이 아닌 file에 저장하고 싶다. 이때 Redirection이 등장한다. +Redirection은 표준 스트림(standard stream)의 흐름을 file로 바꿔준다. 즉, 입출력을 file로도 가능하게 된다는 것이다. +</p> +#### 1. cat > input_data +<br> + + +<br><br> + +cat : stdin으로부터 받은 내용을 stdout으로 보낸다.<br><br> + +cat > input_data : stdin으로 부터 입력받은 내용을 input_data(file)로 Redirect 한다. <br><br> + + +<br> + +<br><br> + +따라서 입력한 200은 input_data에 저장된다. <br><br> + + +#### 2. ./a.exe < input_data +<br> +<br> + +<br><br> + +./a > input_data : 실행시 표준 입력을 기다리는 a.exe에 input_data를 Redirect한다.<br><br> + +따라서 a.exe에 200이 stdin으로 들어가서, a.exe는 조건문의 결과로 Hello World를 stdout인 Terminal 보낸다. <br><br> + + +#### 3. ./a.exe < input_data > output_data + +그런데 여기서 더하여, 출력된 결과를 Redirection을 통해 파일로 보낼 수 있다. <br><br> +<br> + +<br> + +./a > input_data에서 stdout으로 나올 것을 output_file로 Redirection한 것이다. <br><br> +<br> + +<br><br> +cat을 통해 확인할 수 있듯이, output_data에는 ./a > input_data의 결과인 Hello World가 저장되어있다.<br><br> + + +#### 4. ./a < input_data > output_data +<br> +<br> + +<br> + +cat : stdin으로부터 받은 내용을 stdout으로 보냄.<br><br> + +cat > file_name : stdin으로 부터 입력받은 내용을 file로 Redirect 한다. <br><br> + +따라서 입력한 200은 input_data에 저장된다. <br><br> + +이번에는 input_data에 저장되있던 200을 -200으로 변경해보자. <br><br> + +동일하게 ./a < input_data > output_data 를 실행하면, <br><br> + +<br><br> + +stdout이 아닌 stderr로 출력되기 때문에, output_data로의 Redirection이 성공적으로 이루어지지 않았다.<br><br> + +그렇다면 stderr로 Redirection 하기 위해서는 어떻게 해야할까? <br><br> + +<br><br> + +위와 같이 출력의 방향을 > 대신에 <strong>"&>"</strong>을 써주면 된다.<br><br> + +<br><br> + +stderr의 file로의 Redirection이 성공적으로 이뤄졌다. + +#### 5. ./a 1> stdout.txt 2> stderr.txt + +마지막으로, stdout과 stderr를 각각 다른 파일로 Redirection하여 저장할 수도 있다! <br><br> + +<br><br> + +여기서 1, 2는 file Descriptor이며 stdin은 0, stdout은 1, stderr는 2로 정해져 있다.<br><br> + +따라서 말 그대로 해석하면, ./a command의 결과중 stdout은 stdout.txt로, stderr는 stderr.txt에 각각 Redirect한 것이다.<br><br> + +<br><br> + +위 결과를 통해 stdout은 stdout.txt로, stderr는 stderr.txt에 각각 Redirect된 것을 확인할 수 있다. + + +#### 6. Personal Project 1 +<br><br> +<br><br> + +%(+ or -)(자연수)d <br><br> + +%-10d으로 입력하면 정수 출력에 총 10칸을 쓰고, 왼쪽 정렬을 하여 정수를 출력한다. <br><br> + +% ~ d 사이에 숫자는 출력에 차지할 칸 수를 결정하고 + 혹은 아무것도 쓰지 않는다면 오른쪽 정렬, -를 쓰면 왼쪽 정렬을 해서 출력한다.<br><br> ## Personal Project 2