stdio
stdio
stdio : History
- UNIX standard I/O : C언어로부터 유래
- Dennis Ritchie는 H/W의 입출력 장치가 변경, 추가 되더라도 프로세스의 입출력 부분이 영향 받지 않도록 계층화 해야함을 강조
- 추상화된 입출력 계층은 장치에 대해 투명성을 제공해야함
- blok device(저장 장치)나 character device(입출력 장치)는 모두 abstract stream(byte base)로 설계 가능
- 유닉스 계열의
/dev/*
를 오픈할 때 장치에 따라서 추상화된 번호(fd) 부여함
- 유닉스 계열의
- 예로, 프로그래머 입장에서 출력 채널의 특징, 예를 들어 터미널 화면의 종류(모니터, 회상도)를 신경 쓸 이유가 없다.
- 또한 입력 채널의 특징, 예를 들어 키보드의 종류나 제품의 특징에 밎춰서 프로그래밍할 필요도 없어진다.
stdin, stdout, stderr
- stdio은 세개의 이미 정의된 채널을 가지고 있다.
stdin
: standard inputstdout
: standard outputstderr
: standard err
- stdio의 implicit file descriptor, fd 값으로 기본으로 다음과 같은 값을 가진다.
- stdin = 0
- stdout = 1
- stderr = 2
redirection
- stdio의 입출력 방향을 변경
- 추상화된 장치이므로 논리적으로 연결(open), 해제(close) 등이 가능한다.
- 예를 들어 stdin은 기본적으로 키보드와 연결되어있지만, 특정 파일에 연결 시키면 자동으로 타이핑되는 효과가 발생한다.
- stdout은 기본적으로 terminal screen와 연결되어 있지만, 특정 파일에 연결 시키면 자동으로 파일로 저장되는 효과가 발생한다.
command description >FILE
표준출력을 터미널 스크린(default)에서 파일로 >>FILE
표준출력을 해당 파일에 덧붙이거나 없으면 새 파일로 <FILE
표준입력을 키보드(default)가 아니라 파일에서 입력 <<<TEXT
표준입력에 텍스트를 입력 obo@obo-900X3L:~$ echo hello myname is obo > intro.txt obo@obo-900X3L:~$ cat intro.txt hello myname is obo obo@obo-900X3L:~$ echo my favorite animal is rabbit >> intro.txt obo@obo-900X3L:~$ cat intro.txt hello myname is obo my favorite animal is rabbit obo@obo-900X3L:~$ cat <intro.txt hello myname is obo my favorite animal is rabbit obo@obo-900X3L:~$ cat <<<intro.txt intro.txt
- 추상화된 장치이므로 논리적으로 연결(open), 해제(close) 등이 가능한다.
-
file descriptor
command description <&#
표준입력(stdin)을 파일에서 (&#생략시 0을 의미) #>
fd #번을 파일로 (# 생략시 1을 의미) (e.g. strace ls -al 2>ls_strace.txt
)&>
stdout, stderr을 파일로 >&#
출력을 fd #으로 a | b
리다이렉션 파이프, a
의 표준 출력은b
의 표준입력으로 연결됨.|&
으로 만들면 stdout, stderr을 결합해서 보낸다.obo@obo-900X3L:~$ cat redirection.sh echo "+ Message : stdout" echo "+ Message : stderr" >&2 obo@obo-900X3L:~$ ./redirection.sh > redirection.txt # 첫째행은 txt 파일에 저장. 둘째행은 stderr로 리다이렉션이므로 터미널에 출력 + Message : stderr obo@obo-900X3L:~$ ./redirection.sh 2>&1 | cat > redirection.txt obo@obo-900X3L:~$ ./redirection.sh 2>&1 | tee redirection.txt + Message : stdout + Message : stderr
-
pipe | command | description | |——-|——-| |
>(cmd)
| anontmous pipe로 만들어 cmd 명령에 보내여 출력 | |<(cmd)
| cmd 명령 결과를 anonymous pipe로 보내어 읽는다. |- Here Document
- symbol 이름을 지정하면 다시 나올때까지 쳤던 입력이 표준 입력으로 들어온다.
- 문서의 내용이 ftp 프로세스에 전송되어 stdin을 흉내낸다.
-n
옵션은 자동 로그인 프롬프팅을 하지 않는 기능 sftp
나scp
요즘 주로 사용command <<SYMBOL_NAME ... contents SYMBOL_NAME
- Here Document
- named PIPE
- external interface가 있는 경우
- named PIPE 생성
mkfifo /tmp/myfifo_m1