inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

I/O Multiplexing(epoll) - 라이브 프로그래밍

epoll fd 등록 문제

515

인그니야

작성한 질문수 4

1

강의에서는 ep_event에 fd를 등록할 때, epoll_ctl()에 fd를 인자로 지정하니까 ep_event에는 fd를 반드시 넣어줘야 하는 건 아니라는 식으로 말씀하셨는데,

실제로 시험을 해보니, epoll_ctl()과 ep_event의 fd는 의미하는 게 전혀 다르네요.

ep_event에는 STDIN_FILENO을 등록하고, epoll_ctl()에는 fd를 등록한 후, fd에 이벤트를 발생시켰더니(make clean 등) epoll_wait()에서 반환하는 Descriptor는 STDIN_FILENO네요.

이는 즉슨, epoll_ctl()에서는 이벤트를 감시할 Descriptor를 의미하고, ep_event에서는 이벤트 발생 시 반환할 Descriptor를 의미하는 듯 하네요.

linux

답변 1

0

런잇(ProgCoach4U)

안녕하세요. 인그니야님.

"이는 즉슨, epoll_ctl()에서는 이벤트를 감시할 Descriptor를 의미하고, ep_event에서는 이벤트 발생 시 반환할 Descriptor를 의미하는 듯 하네요."

 => 네. 맞습니다.

"강의에서는 ep_event에 fd를 등록할 때, epoll_ctl()에 fd를 인자로 지정하니까 ep_event에는 fd를 반드시 넣어줘야 하는 건 아니라는 식으로 말씀하셨는데,"

 => 이것도 맞습니다.

말씀하신대로 epoll_ctl()의 세번째 인자인 fd와 네번째 인자인 epoll_event의 member 변수인 data는 의미가 다릅니다. 세번째 인자인 fd는 이벤트를 감시할 fd를 입력하는 것이고, epoll_event.data 변수는 해당 fd에서 이벤트가 발생했을 때 넘겨 받을 어떤 임의의 값 입니다. 이 값으로 어떤 이벤트가 일어났었는지 추정하거나 이벤트가 일어났을 때 코드에서 사용할 값을 넣기도 합니다. 그래서 일반적으로 특정 fd에 대한 이벤트를 받아 처리하기 위해서는 epoll_event.data 변수에 감시할 fd를 넣어 epoll_ctl(add)를 수행하게 됩니다. 하지만 반드시 fd를 넣을 필요는 없습니다. 예를 들어 fd를 포함하고 또 다른 정보도 포함하고 있는 structure pointer를 넣을 수도 있죠. 즉, 내가 넣어준 값 그대로를 이벤트시 리턴하기 때문에 그 어떤 값이라도 가능하지만 이벤트가 발생한 fd를 받아 쓸 경우가 대부분이기 떄문에 fd 혹은 fd를 포함하는 값을 넘기게 됩니다. 

좀 더 정확히 이해를 하셨을지 모르겠네요. 추가 질문 있으시면 또 글 남겨주세요. 좋은 질문 감사합니다~~ :)

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

0

35

2

select API 실습 코드 질문

0

39

2

wsl에서 fcntl사용

0

72

2

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

0

179

2

./stat 파일이름

0

272

2

fopen r, r+모드 차이

0

460

2

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

0

326

1

pthread 질문

0

419

2

I/O Multiplexing(select) 질문

0

324

1

inotify.c. ret 질문

0

301

1

inotify.c 질의합니다.

1

316

1

child process

0

715

1

read/blocking

0

564

1

flock

0

565

1

system call

0

598

1

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

0

487

1

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

0

371

1

exec 관련 궁금한 사항

0

450

2

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

0

551

1

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

0

251

2

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

0

253

1

2번 multi thread 방법 질문

0

241

1

segmentation fault 발생 관련 문의

1

841

1

라이브 코딩 실습 코드

0

234

1