일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- lseek
- opcode
- 명령어
- 가상 상속
- kevent
- UNIX
- kqueue
- 터미널 제어
- 어셈블리어
- getch
- 터미널제어
- 커서 제어
- 서버 프로그래밍
- 레지스터
- 클래스 상속
- nonblock
- Assembly
- 가상상속
- multiplexing
- 터미널 커서
- termcap
- MAN
- canonical
- cursor
- IPC
- 프롬프트
- termios
- virtual 상속
- pipe buffer
- 멀티플렉싱
- Today
- Total
목록UNIX (2)
오늘도 밤이야
UNIX 환경에서의 대표적인 IPC(프로세스간 통신) 방법 중 하나인 pipe의 특징에 대해서 알아보자. pipe는 단방향으로만 데이터를 전달할 수 있다 pipe는 커널 메모리를 파일로써 접근할 수 있게 해주어, pipe() 사용시 배열로 두 개의 file descriptor를 발급받는다. fd[0]은 input stream, fd[1]은 output stream으로, 부모 프로세스가 fd[1]에 write한 데이터를 자식 프로세스가 fd[0]으로 read 할 수 있다. 이때 반대의 경우는 사용이 불가능하다. 부모 프로세스가 write, 자식 프로세스가 read하는 상황에서 그 pipe를 유지한 채 자식프로세스가 fd[1]에 write할 수 없다. 이런 사용을 막기 위해 pipe 사용 시 각 프로세스에서..
프롬프트 또는 콘솔 환경을 만들기 위해서 키보드 입력을 한 자씩 받아야할 때가 있다. unistd.h의 read함수를 STDIN에서 1바이트만큼 받으면 되지 않을까? 해서 다음과 같은 코드를 실행해보았다. #include #include int main(void) { char c; while (read(0, &c, sizeof(c)) > 0) { printf("input: %c\n", c); } } read는 분명 1byte씩 잘 읽고 있다. 그렇다면 왜 return이 입력되기 전에는 계속 입력만 받고 있을까? 이는 터미널의 canonical input 설정 때문이다. 한 line(line의 기준은 '\n'이다) 단위로 읽기 때문에 read()가 몇 byte로 읽든 newline이 입력되기 전까지 실시간..