일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- kernel
- pwncollege
- 리버싱
- Leviathan
- 시그널
- css
- 워게임
- 시스템프로그래밍
- 리눅스 커널
- 어셈블리어
- write up
- C++
- Pwnable.kr
- 취약점
- C언어
- 알고리즘
- 커널
- 프로그래밍
- wargame
- 컴퓨터구조
- 리눅스
- pwn.college
- radare2
- px4
- 시스템 프로그래밍
- 드론
- 리눅스커널
- 시스템
- 시스템해킹
- Bandit
Archives
- Today
- Total
Computer Security
#20 파일 속성 제어 본문
반응형
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
반응형
'리눅스 시스템 프로그래밍' 카테고리의 다른 글
#22 파일 이벤트 (0) | 2022.09.27 |
---|---|
#21 파일 속성 제어 (실습) (2) | 2022.09.26 |
#19 파일을 이용한 동기화 (실습) (2) | 2022.09.24 |
#18 파일을 이용한 동기화(Race condition) (2) | 2022.09.23 |
#17 Memory map (실습) (0) | 2022.09.22 |
Comments