반응형
주로 시리얼 통신에서 많이 쓰이는 옵션인데요.
원문을 보자면
When opening a FIFO with O_RDONLY or O_WRONLY set: If O_NONBLOCK is set:
If O_NONBLOCK is set:
|
읽기 귀찮으신 분들을 위해 간단히 요약해서 말하면,
BLOCK 모드에서write 하는경우 : 다른 thread가 read로 파일을 읽을 때까지 기다림. read 하는경우 : 다른 thread가 write로 파일에 쓸 때까지 기다림.
NON BLOCK 모드에서
write 하는경우 : 다른 thread가 read상태로 기다리고 있지 않으면 에러 리턴으로 딜레이 없이 끝남.read 하는경우 : 읽을게 있으면 읽은 바이트 리턴하고, 없으면 -1 리턴, 둘다 딜레이 없이 바로 끝남.
시리얼 통신에서 예를 들어보겠습니다.
예시1 : O_NONBLOCK 옵션이 없는경우
fd = open( "/dev/ttyS3", O_RDWR | O_NOCTTY );
res = read(fd, buf, 255);
이런식으로 데이터를 read하면 데이터가 들어올때까지 프로그램이 블락킹 상태가 됩니다. 프로그램이 멈춘다고 생각하는게 편하겠죠.
write의 경우에는 상대방이 read()로 들어갈 때까지 기다립니다.
예시2 : O_NONBLOCK 옵션이 있는경우
fd = open( "/dev/ttyS3", O_RDWR | O_NOCTTY | O_NONBLOCK );
res = read(fd, buf, 255);
데이터가 있든 없든 기다리지 않고 나옵니다. 읽을 데이터가 있으면 읽어온 데이터를 buf에 기록하고, res에 읽어온 바이트 수를 리턴하죠. 없다면 res로 -1을 리턴합니다.
write의 경우에도 read와 같은 방식으로 동작합니다.
반응형
'Computer Science > Linux' 카테고리의 다른 글
[Linux] 32bit 리눅스에서 64bit 나눗셈, 나머지 계산, do_div() (0) | 2014.10.01 |
---|---|
[Linux] make menuconfig 에러 (0) | 2014.07.16 |
[Linux] 리눅스 커널 버전 확인 (0) | 2014.07.14 |
[Linux] clock source 확인하기 (0) | 2014.04.30 |
[Linux] vi, vim 환경설정(.vimrc) (3) | 2014.04.09 |