gpt4 book ai didi

c++ - `POLLOUT` Linux函数中的 `poll`事件是什么意思?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:19:56 25 4
gpt4 key购买 nike

从 Linux 文档中,POLLOUT 表示可以无阻塞地写入正常数据。好吧,但是这个解释是模棱两可的。poll 报告此事件后,可以在不阻塞的情况下写入多少数据? 1字节? 2个字节?技嘉?在阻塞套接字上发生 POLLOUT 事件后,如何检查我可以在不阻塞的情况下向套接字发送多少数据?

最佳答案

poll 系统调用仅告诉您文件描述符(物理设备)中发生了一些事情,但它不会告诉您有多少空间可供您读取或写入。为了准确知道有多少字节数据可用于读取或写入,您必须使用 read() 或 write() 系统调用来获取返回值,该返回值表示您实际读取或写入的字节数。

因此,poll() 主要用于必须使用多个输入或输出流而不会卡在其中任何一个的应用程序。在这种情况下,您不能使用 write() 或 read(),因为您不能在一个线程内同时监视多个描述符。

顺便说一句,对于设备驱动,POLL在驱动中的底层实现通常是这样的(代码来自ldd3):

  static unsigned int scull_p_poll(struct file *filp, poll_table *wait)
{

poll_wait(filp, &dev->inq, wait);
poll_wait(filp, &dev->outq, wait);
...........
if (spacefree(dev))
mask |= POLLOUT | POLLWRNORM; /* writable */
up(&dev->sem);
return mask;
}

关于c++ - `POLLOUT` Linux函数中的 `poll`事件是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30171464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com