운영체제에서 주어진 일을 하는 최소단위는 프로세스라는 것을 알고 있을 것이다. 프로세스는 프로그램의 실행된 이미지로 운영체제의 메인메모리에 위치한다.
이렇게 프로그램이 실행되어서, 프로세스가 생성되면 프로세스는 컴퓨터의 여러가지 기본자원을 사용할 수 있게 된다. 이 기본자원에 3개의 파일이 포함되어 있다. 바로 입력과 출력, 에러를 담당하는 3개의 파일들이다. 이것들을 표준입력, 표준출력, 표준에러라고 한다.
- 표준입력 : 키보드로 부터 입력을 받기 위해서 사용한다.
- 표준출력 : 모니터로 출력하기 위해서 사용된다.
- 표준에러 : 에러도 역시 모니터를 통해서 출력된다는 점에서는 표준출력과 마찬가지다. 그러나 어떠한 구분도 없다면, 화면에 출력된 값이 정상적으로 처리된 메시지인지, 에러메시지 인지 확인할 수 없을 것이다. 때문에 표준에러라는 것을 따로 둬서 구분할 수 있게끔하고 있다.
간단한 예를 들어서 설명해보도록 하겠다.
#include <unistd.h>
#include <string.h>
int main(int argc, char **argv)
{
char data[80];
char *msg = "Input Msg : ";
memset(data, 0x00, 80);
write(1, msg, strlen(msg)); // 1
read(0, data, 80); // 2
write(1, data, strlen(data)); // 3
write(2, "Error\n", 6); // 4
}
- "Input Msg"메시지를 모니터에 표준출력 한다.
- 표준입력을 통해서 데이터를 읽어들인다. 읽어들인 데이터는 data 에 복사한다.
- data에 복사된 내용을 data의 길이 만큼 모니터에 표준출력 한다.
- Error라는 메시지를 모니터에 표준에러형태로 출력한다.
# ./write
Input Msg : hello world
hello world
Error
- write(2)
이 함수는 파일지시자(첫번째 인자)가 가리키는 파일에 "쓰기" 위해서 사용한다.
- read(2)
이 함수는 파일지시자가 가리키는 파일에서 데이터를 "읽기" 위해서 사용한다.
표준에러는 쉘의 재지향을 이용해서 따로 분리해서 읽을 수 있다. 재지향은 >을 쓰면 된다. - 2장 리눅스와 C언어참고 - 또한 2>와 같이 표준에러만을 분리해서 재지향 시킬 수가 있다. 여기에서 2가 바로 표준출력을 가리키는 파일지시자 번호다. 이제 다음과 같이 표준에러만 별도의 파일에 재지향 시켜보도록 하자.
출처 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/C/Documents/CprogramingForLinuxEnv/Ch13_Input_Output
# ./write 2> dump.log표준에러가 모니터 화면이 아닌, dump.log 파일에 저장된걸 확인할 수 있을 것이다. 이로써, 표준에러와 표준출력이 모니터를 출력방향으로 하고 있지만, 명백히 구분되는 것임을 이해했을 것이다.
Input Msg : hello world
hello world
# cat dump.log
Error
출처 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/C/Documents/CprogramingForLinuxEnv/Ch13_Input_Output
'It's IT > It's System(linux,win)' 카테고리의 다른 글
Linux 공부를 함 해볼까?????? (0) | 2019.12.24 |
---|---|
linux, unix shell script 조건문에서 사용하는 기호 (0) | 2008.01.17 |
퍼미션, CHMODE (0) | 2007.12.14 |
VI명령어 (0) | 2007.12.14 |
PING (0) | 2007.12.14 |