poll 사용 예제
man page 에는 poll_wait 가 대기를 시켜준다고 하는데..
아무리 사용해 봐도 poll_wait 는 대기를 하지 않고 바로 return 처리된다.
이에 wait_event_interruptible 을 사용 하였다.
주문한 책이 오면 poll_wait 에 대해 좀 더 읽어 본 후 재업하도록 하겠다.
DECLARE_WAIT_QUEUE_HEAD(wait_queue);
unsigned int onegun_driver_poll(struct file *file, poll_table * wait)
{
printk("%s()++\n", __func__);
// poll_wait(file, &wait_queue, wait); /* normal case */
if (wait_event_interruptible(wait_queue, (g_data==5)))
return -ERESTARTSYS;
g_data = 7;
printk("%s()--\n", __func__);
return POLLIN;
}
static ssize_t sysfs_store_func(struct class *cls, struct class_attribute *attr, const char *buf, size_t count)
{
int value;
sscanf(buf, "%d", &value);
printk("%s() value=%d\n", __func__, value);
g_data = value;
if(value == 5) {
printk("%s() try to wake up\n", __func__, value);
wake_up_interruptible(&wait_queue);
}
return count;
}
예제코드 모두 다운받기 =>
각각 code 만 보기 =>
커널 코드
user 코드
모 사이트에 보니 이런거 만원씩 받고 팔던데...
참고 하시는 분들 커피 한잔은 못 사주시더라도, 댓글은 좀 남겨주세요.
'Programming > Linux_Kernel' 카테고리의 다른 글
linux user semaphore (0) | 2014.04.11 |
---|---|
사용가용한 physical memory block 을 얻어오는 방법 (0) | 2014.04.07 |
class 에 sysfs node 등록하여 사용하기 (0) | 2014.04.02 |
demand paging (0) | 2014.04.01 |
리눅스커널의메모리관리 (0) | 2014.03.31 |