프로그래밍[Univ]/C언어

redirection과 pipe 그리고 diff

Cloud Travel 2008. 4. 7. 12:58

1. redirection
... redirection을 쉽게 설명하기위해서 고민하였습니다. 잘 설명할지 모르겠내요...

영어에서 'redirect'라는 단어가 있습니다. 이 단어의 뜻은 '새로운 방향으로 돌리다'입니다.
리눅스 환경에서도 redirect라는 단어는 같은 역활을 하는 것 같습니다.

일단, 우리가 쓰는 프로그램상에서 입출력과 운영체제와의 관계를 알아봅시다.
우리가 운영체제를 통해서 응용프로그램을 쓸때 자연스럽게 키보드를 사용합니다.
이것은 표준입력이 키보드로 설정되어있기 때문입니다.
그리고 우리가 키보드로 썻던 내용은 자연스럽게 화면상에 나타납니다.
이것은 표준출력이 화면(스크린)으로 되어 있기 때문입니다.

redirection은 위와 같이 설정되어있는 것을 새로운 방향으로 돌린다는 것입니다.
즉, 키보드가 아닌 어떤 다른 문서를 통해 입력을 대신하고,
     다른 문서나 파일을 통해 출력을 한다는 것입니다.
redirection의 기호는 'f1<f2'   ,  'f1>>f2'  ,  'f1>f2' 3가지가 있습니다.
<    >>   > 이렇게 화살표처럼 생각하면 됩니다.
f1 < f2 : f2의 내용을 f1으로 출력
f1 >> f2 : f1의 내용을 f2내용에 출력(단, 원래 파일은 그대로 남긴다.)
f1 > f2 : f1의 내용을 f2으로 출력
*주의 사항*
<   > 을 사용한 redirection은 원래 출력되는 대상에 있는 내용에 덮어쓰기를 합니다.
>> 은 이어쓰기르 합니다.

예를 들어보겠습니다.

사용자 삽입 이미지

이렇게 소스를 짠 뒤에
gcc copy.c -o copy  [Enter]
./copy < copy.c       [Enter] >'이것은 copy.c의 내용을 copy를 통해 실행'는 내용
사용자 삽입 이미지
이런 결과를 가지게 됩니다.
잘 생각해보세요. copy.c의 소스를 copy라는 프로그램으로 돌리면 ?
위와 같이 나오겠죠?
여러가지 실험을 통해  redirection에 대해서 익숙해지기를 바랍니다.
실험시에 원래문서가 사라질 수도 있으니... 새 파일을 만들고 실험해보세요..;
(필자는 프로그램하나날려서 다시 짯습니다 ㅠ)

2. pipe
이젠 pipe에 대해서 알아봅시다.
program1 | program2
의 형식으로 쓰며, '|'을 파이프(pipe)라고 부릅니다.
pipe의 정의는 'connect stdin and stdout'라고 교수님이 알려줬습니다. =_=;;

영어는 집어치우고..;

pipe는 단순히 프로그램을 연결해주는 것입니다.
예를들어 제곱근을하는 프로그램1을 만들었다고 생각하면
프로그램1|프로그램1
은 사제곱근을 하는 프로그램이 실행된다는 것입니다.

3. diff
diff file1 file2
의 형식을 이루고 있으며, 단순히 file1과 file2의 내용이 같은지를 살펴보는 것입니다.
파일이 갔다면 아무런 말 없이 다시 커서창이 뜰것이고
파일이 다르다면 다른내용을 출력해줍니다.