В LDD3, я видел такие кодыЗачем нам нужно вызвать poll_wait в опросе?
static unsigned int scull_p_poll(struct file *filp, poll_table *wait)
{
struct scull_pipe *dev = filp->private_data;
unsigned int mask = 0;
/*
* The buffer is circular; it is considered full
* if "wp" is right behind "rp" and empty if the
* two are equal.
*/
down(&dev->sem);
poll_wait(filp, &dev->inq, wait);
poll_wait(filp, &dev->outq, wait);
if (dev->rp != dev->wp)
mask |= POLLIN | POLLRDNORM; /* readable */
if (spacefree(dev))
mask |= POLLOUT | POLLWRNORM; /* writable */
up(&dev->sem);
return mask;
}
Но он говорит poll_wait не будет ждать и сразу же возвращается. Тогда зачем нам это называть? Почему мы не можем вернуть маску?
Затем, когда делает сон процесса? – demonguy
@demonguy См. Мой обновленный ответ –
Вы имеете в виду, что вызов опроса из пользовательского пространства блокирует процесс, не так ли? – demonguy