Computer Security

#20 파일 속성 제어 본문

리눅스 시스템 프로그래밍

#20 파일 속성 제어

쿠리 Kuri 2022. 9. 25. 18:30
반응형

read API가 호출을 했을때, 읽을 데이터가 없는 경우에 Blocking operation 과 Non-Blocking operation의 차이가 발생한다.

 

 

 


Blocking operation

 

 

 

  • 요청한 작업을 마칠 때까지 계속 대기(Blocking)한다.
  • 즉시 return한다.
  • return 값을 받아야 끝난다.
  • Thread 관점 : 요청한 작업을 마칠 때까지 계속 대기하며 return 값을 받을 때까지 한 Thread를 계속 사용/대기 한다.

 

호출된 함수가 자신의 작업을 모두 마칠 때까지 호출한 함수에게 제어권을 넘겨주지 않고 대기하게 만든다면 blocking이다.

 

 

 

 

 

 

 


Non-Blocking operation

  • 요청한 작업을 즉시 마칠 수 없다면 즉시 return한다.
  • 즉시 리턴하지 않는다. (일을 못하게 막는다.)
  • Thread 관점 : 하나의 Thread가 여러 개의 IO를 처리 가능하다.

 

호출된 함수가 바로 return해서 호출한 함수에게 제어권을 넘겨주고 호출한 함수가 다른 일을 할 수 있는 기회를 줄 수 있으면 non-blocking이다.

 

 

 

 

 

 

 


Non-blocking 모드 설정 방법

 

 

1. open() 시 O_NONBLOCK 설정

 

2. open() 이후 fcntl()을 이용해 O_NONBLOCK 설정/해제

 

 

int fcntl(int fd, int cmd, ... /* arg */);

 

 

파라미터

- fd : 변경하고자 하는 file descriptor

 

- cmd 

     - F_GETFL : 현재 file descriptor의 설정 상태를 가져오는 API

     - F_SETFL : argument로 넘기는 값을 설정하는 API

 

 

 

반환 값

- 성공 시 0

 

- 실패 시 -1

 

반응형
Comments