[완료]다이렉션에 대해 알고 싶습니다.
글쓴이: dvvbstation / 작성시간: 수, 2008/07/23 - 8:37오후
리눅스 처음 입문하는 입문자입니다.
나름 궁금한게 있어 질문 드립니다.
답변 주시면 좋겠습니다.
a.txt에는 aaaa
b.txt에는 bbbb
c.txt에는 cccc
d.txt에는 dddd
를 입력하고 저장하였습니다.
cat a.txt>b.txt>c.txt>d.txt
d.txt의 결과값? aaaa
b.txt=c.txt=null이 되는데요. 왜 이렇게 되는 건지 궁금합니다.
cat a.txt>>b.txt>>c.txt>>d.txt
d.txt의 결과값?
dddd
aaaa
가 됩니다.
b.txt=bbbb, c.txt=cccc
b.txt와 c.txt파일의 내용이 추가되지 않는 이유는 무엇인가요.
궁금합니다.
cat a.txt>b.txt>c.txt>d.txt 하면
d.txt는 a.txt의 내용으로 대체 되며 b.txt와 c.txt의 파일은 null이 되는데 왜 그런가.
Forums:
저두 왜 그럴까 싶어
저두 왜 그럴까 싶어 찾아봤습니다.
리다이렉션의 간단한 소스가
구글북서치
에 나오는 군요.
open 함수와 dup2 함수를 적용시키면 이해될 것 같습니다.
_______
*출력과 입력*
$ echo "aaa"
aaa
"aaa" 라는 것을 입력하면, 화면에 "aaa"라고 출력이 됩니다. 전자를 'standard
input' 줄여서 'stdin', 후자를 'standard output' 줄여서 'stdout' 라고 하는
군요. 간단히 출력, 입력이라고 부르겠습니다.
위의 echo 프로그램은 "aaa"를 입력 받아서, "aaa"를 화면에 출력하는 프로그램이
군요. 리다이렉션('>')을 사용하면 화면에 출력하는 것 대신에 파일에 출력할 수가
있군요.
$ echo "aaa" > a.txt
$ echo "bbb" > a.txt
$ cat a.txt
bbb
*어떤일이 일어나나*
$ cat a.txt>b.txt>c.txt>d.txt
위의 명령으로 어떠한 일이 일어나는지 보겠습니다.
1. 'b.txt' 파일을 연다. 파일의 내용은 사라집니다. open 함수를 사용합니다.
2. 화면으로 출력될 내용을 'b.txt'로 출력되게 합니다. dup2 함수를 사용합니다.
3. 'c.txt' 파일을 연다. 파일의 내용은 사라집니다. open 함수를 사용합니다.
4. 'b.txt'로 출력될 내용을 'c.txt'로 출력되게 합니다. dup2 함수를 사용합니다.
5. 'd.txt' 파일을 연다. 파일의 내용은 사라집니다. open 함수를 사용합니다.
6. 'c.txt'로 출력될 내용을 'd.txt'로 출력되게 합니다. dup2 함수를 사용합니다.
7. cat을 통해서 'a.txt'의 내용을 입력받습니다.
8. 입력받은 내용은 cat에 의해서 출력됩니다. 출력은 'd-txt'로 됩니다.
이상에서 b.txt와 b.txt 의 내용은 사라졌습니다.
$ cat a.txt>>b.txt>>c.txt>>d.txt
위의 명령으로 어떠한 일이 일어나는지 보겠습니다.
1. 'b.txt' 파일을 연다. 파일의 내용은 사라지지 않습니다. open 함수를 사용합니다.
2. 화면으로 출력될 내용을 'b.txt'로 출력되게 합니다. dup2 함수를 사용합니다.
3. 'c.txt' 파일을 연다. 파일의 내용은 사라지지 않습니다. open 함수를 사용합니다.
4. 'b.txt'로 출력될 내용을 'c.txt'로 출력되게 합니다. dup2 함수를 사용합니다.
5. 'd.txt' 파일을 연다. 파일의 내용은 사라지지 않습니다. open 함수를 사용합니다.
6. 'c.txt'로 출력될 내용을 'd.txt'로 출력되게 합니다. dup2 함수를 사용합니다.
7. cat을 통해서 'a.txt'의 내용을 입력받습니다.
8. 입력받은 내용은 cat에 의해서 출력됩니다. 출력은 'd-txt'로 됩니다.
*open 함수*
'>' 와 '>>' 의 차이는 "open 함수가 파일을 어떻게 여는가" 입니다. open 함수는
파일을 다음의 세가지 형태로 열어요. read-only, write-only, read/write.
read-only는 파일을 읽기만 할 때 사용합니다. 파일은 어떠한 변화도 일어나지
않습니다. write-only는 파일의 내용을 바꾸고 싶을 때 사용합니다. 단 기존의 내용은
사라집니다. read/write 는 파일에 내용을 추가하고 싶을 때에 사용합니다. 기존의
내용은 사라지지 않습니다.
'>'는 write-only를 사용합니다.
'>>'는 read/write를 사용합니다.
*결론*
결론적으로,
'>'에서 a.txt=b.txt=null 인 이유는 write-only로 파일을 열어서 파일의
내용이 사라져버렸기 때문입니다.
반면,
'>>'에서 b.txt, c.txt 가 변화되지 않는 이유는 read/write로 파일을 열어서 입니다.
'>>'에서 내용이 추가되지 않는 이유는 dup2 함수에 의해서 리다이렉션이 연차적으로
일어나서, b.txt와 c.txt에는 리다이렉션이 일어나지 않기 때문입니다.
*참고*
- "linux for programmers and users", Prentice Hall : 12.4.11. Redirection
- 메뉴얼 stdin(3) ($ man stdin)
- 메뉴얼 sh ; redirection 섹션
- 메뉴얼 open(2) ($ man open)
- 메뉴얼 dup2(2) ($ man dup2)
------------------------------------------
emacs user
------------------------------------------
emacs user
저도
저도 궁금했었는데
write-only
read/write
이 차이였군요..
잘 보고 갑니다.
우리 항시 웃고 살아요 ^^
감사합니다^^
감사합니다^^
댓글 달기