inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

리눅스 시스템 프로그래밍 - 이론과 실습

파일 이벤트 - 라이브 프로그래밍

프로그램 동작 질문입니다!

해결된 질문

231

Mangab

작성한 질문수 2

2

while문 안에서 read로 fd에 있는 이벤트들을 읽는데 이때 프로세스가(아직 이벤트가 발생하지 않았음에도) 종료되지 않고 기다리는 것은  inotify_init()할 때 플래그를 주지 않아 blocking으로 생성되었기 때문인가요?

그리고 inotify_add_watch함수 호출하면 해당 디렉토리를 감시하는 새로운 쓰레드를 생성하는 건가요?

마지막으로 fd가 blocking으로 열렸을 때 read가 0을 반환할 수 있나요? 그러니까 blocking으로 열리면 read에서 값이 생성될 때까지 기다리는데 생성된 값의 바이트 수가 0일 수 있나요?

좋은 강의 감사드립니다!!

linux

답변 1

1

런잇(ProgCoach4U)

안녕하세요. Mk H님. 답변 드리겠습니다.

A1. 맞습니다. 리눅스의 I/O는 기본적으로 blocking mode 입니다. inotify_init()시에 non-blocking option을 주지 않았기 때문에 blocking I/O를 하는 것 입니다.그래서 이벤트가 발생할 때까지 기다리게 됩니다.

A2. inotify_add_watch 함수를 호출했다고 새로운 쓰레드가 생성되지는 않습니다. 프로세스는 리눅스 커널이 I/O 이벤트가 일어났다는 것을 기다리는 것이고, 이벤트가 발생했음을 알려주는 것은 리눅스 커널의 몫 입니다. add_watch()를 하면 커널이 감시해야할 파일이 추가된 것이지 쓰레드가 생성되는 것은 아닙니다.

A3. 없다고 보시면 될 것 같습니다. 근래의 커널에서는 signal에 의해 interrupt 되더라도 에러를 리턴하도록 되어있기 때문에 거의 없다고 보셔도 될 것 같습니다. 하지만 return value는 반드시 확인하셔야 합니다.^^

좋은 질문 감사드려요~ :D

inotify 객체에 등록된 watch descriptor 해제 관련 질문

0

29

2

select API 실습 코드 질문

0

34

2

wsl에서 fcntl사용

0

71

2

inotify_event 구조체 질문 [파일 이벤트 - 라이브 프로그래밍]에서...

0

178

2

./stat 파일이름

0

272

2

fopen r, r+모드 차이

0

459

2

강의를 모두 수강하고 스스로 구현하면 좋을 과제나 프로젝트 주제가 있을까요?

0

325

1

pthread 질문

0

419

2

I/O Multiplexing(select) 질문

0

323

1

inotify.c. ret 질문

0

300

1

inotify.c 질의합니다.

1

316

1

child process

0

714

1

read/blocking

0

563

1

flock

0

563

1

system call

0

595

1

pthread_create() 함수 이용했을 때, thread가 두번 호출되는 것 처럼 나타납니다. 왜 그런것인가요?

0

486

1

fork() 함수 사용시 결과 관련 질문

0

370

1

exec 관련 궁금한 사항

0

450

2

파일 디스크립터와 FILE 구조체에 대한 질문

0

551

1

buf 선언에 따른 read() fail 문제

0

250

2

파일 이벤트 - 라이브 프로그래밍 에서 캐스팅 질문

0

251

1

2번 multi thread 방법 질문

0

241

1

segmentation fault 발생 관련 문의

1

837

1

라이브 코딩 실습 코드

0

230

1