프로그램 동작 질문입니다!
while문 안에서 read로 fd에 있는 이벤트들을 읽는데 이때 프로세스가(아직 이벤트가 발생하지 않았음에도) 종료되지 않고 기다리는 것은 inotify_init()할 때 플래그를 주지 않아 blocking으로 생성되었기 때문인가요?
그리고 inotify_add_watch함수 호출하면 해당 디렉토리를 감시하는 새로운 쓰레드를 생성하는 건가요?
마지막으로 fd가 blocking으로 열렸을 때 read가 0을 반환할 수 있나요? 그러니까 blocking으로 열리면 read에서 값이 생성될 때까지 기다리는데 생성된 값의 바이트 수가 0일 수 있나요?
좋은 강의 감사드립니다!!
답변 1
1
안녕하세요. 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





