티스토리 뷰
1. exec 개념
실행(=프로세스 이미지 교체)
파일 열기. redirection의 일종. sub-shell을 만들지 않고 현재 셸에서 파일을 읽고/쓰고/닫을 수 있는 장점.
exec #<FILE : 읽기용 FILE로 오픈. 오픈된 파일은 fd#번을 할당 받는다. 디폴트=0
exec #>FILE : 쓰기용 FILE로 오픈. 오픈된 파일은 fd#번을 할당 받는다. 디폴트=1
exec #>>FILE : append용 FILE로 오픈.
exec #<&- : #번 fd를 닫는다. 읽기 채널
exec #>&- : #번 fd를 닫는다. 쓰기 채널
exec #<>FILE : 파일을 read, write가 모두 가능하도록 오픈. 흔하지 않다.
fd는 child process를 만들면 그에 상속이 된다.
2. 파일 열기
execfd01.sh 파일을 아래와 같이 작성.
코드 해석:
hello.txt에 "Hello world"라는 문자열을 저장한다.
hello.txt를 10번 fd로 열었다. rw모드
read명령의 -n 옵션(숫자)을 이용해서 5character를 읽도록. 10번 fd로부터.
echo한다.

실행권한을 변경하고 실행하면 Hello가 출력된다.

참고) 사용하지 않는 fd값을 지정하면 오류가 발생한다.
echo -n "MSG" >&4

여기서 >&4 는 redirection 내용이다.
echo -n옵션에 대한 매뉴얼 먼저 확인.

실행결과는 다음과 같다.

결론 : fd를 사용하려면 먼저 open해서 열어야 한다.
3. 파일 열기, 파일 쓰기
exec_rw_fd.sh파일을 아래와 같이 작성한다.
코드 해석:
fd 0~2는 STD IN/OUT/ERR로 예약되어 있으므로 fd3번부터 시작.
$1 첫번째 argument는 fd3번을 읽기용(<)으로 오픈.
$2 두번째 argument는 fd4번을 쓰기용(>)으로 오픈.
while loop에서 : (null command) 로 무한 루프.
head명령으로 &3으로부터 stdin을 받음. head명령어에 옵션을 안 주었으니 디폴트 10라인씩 읽어온다. 읽어온 값을 in_string에 저장.
in_string 값이 있는지 확인. 없으면 exit.
echo "---" >&4 : 4번 fd에 구분선 저장.
echo "$in_string" >&4 : 4번 fd에 in_string(읽어온 값) 저장.

실행권한을 변경하고 내용을 읽어들일 oldfile.txt를 만들었다.

위 프로그램을 실행하여 newfile.txt를 확인하면 다음과 같이 잘 동작하였다.

이때 구분선을 18라인씩 하고 싶다면 위 exec_rw_fd.sh파일의 head -18 로 옵션을 넣으면 된다.

4. 실습 해보기
위는 자식 프로세스에서 실행하기 때문에 cnt값을 받아올 수 없다.
보통 초록색 방법으로 해결하는데, 아래의 exec을 이용해서 현재 셸에서 실행하는 방법으로도 해결이 가능하다.

5. 예제
명령을 typing할 때마다 자동으로 뒤에 것이 실행됨.
명령어가 typing될 때마다 중간에 프로그램이 하나 더 껴야할 때 사용하는 기능.
이해가 안된다..


6. 실행
socket도 하나의 파일이다. fd값으로 나온다.

'OS > 리눅스' 카테고리의 다른 글
| Ubuntu16.04 - 웹캠 사용하기 (0) | 2021.01.19 |
|---|---|
| Ubuntu16.04 아두이노 IDE 설치 (0) | 2021.01.13 |
| Ubuntu16.04 외부명령어 - split, head, tail, paste, cat, tac함수 (0) | 2020.12.16 |
| Ubuntu16.04 curl, 정규표현식 실습 (0) | 2020.12.16 |
| Ubuntu16.04 - 괄호 실습 (0) | 2020.12.15 |
- Total
- Today
- Yesterday
- 초음파센서
- umount
- Mount
- vue/cli
- VMware
- 아두이노 IDE
- 원격 통신
- Ubuntu20.04
- sensehat
- VirtualBox
- filesystem
- 프로그래머스
- 백준알고리즘
- Ubuntu16.04
- 윈도우
- python3
- 리눅스
- roslaunch
- 8자주행
- ROS
- 우분투
- 윈도우 복구
- HC-SR04
- Python
- C++
- Publisher
- set backspace
- subscriber
- 포트인식문제
- 코드리뷰
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
