gpt4 book ai didi

c++ - 读取描述符(ioctl、fcntl)

转载 作者:行者123 更新时间:2023-11-28 07:27:22 26 4
gpt4 key购买 nike

 // Wait until data can be read without blocking.
size_t read_some(implementation_type& impl,
const null_buffers&, asio::error_code& ec)
{
// Wait for descriptor to become ready.
descriptor_ops::poll_read(impl.descriptor_, ec);

return 0;
}

内部 descriptor_ops

     int poll_read(int d, asio::error_code& ec)
{
if (d == -1)
{
ec = asio::error::bad_descriptor;
return -1;
}

pollfd fds;
fds.fd = d;
fds.events = POLLIN;
fds.revents = 0;
errno = 0;
int result = error_wrapper(::poll(&fds, 1, -1), ec);
if (result >= 0)
ec = asio::error_code();
return result;
}
  1. pollfd,原型(prototype)定义在哪里?

  2. ::poll 引用哪个文件的轮询?

  3. ioctl , fcntl 适用于 unix 和 window 系统?

  4. const null_buffers&,传递对 null_buffer 的引用有什么用?

谢谢

最佳答案

  1. /usr/include/poll.h
  2. poll.h 中的那个!这是一个系统调用。
  3. 不,这段代码是特定于 unix 的。 Windows 确实有 WSAIoctl,但与 fcntl(您拼错)完全相同。
  4. 我不太了解 Boost。您似乎已经从 reactive_descriptor_service 类中提取了该代码。一般来说,read_some 方法读取数据,reactive_descriptor_service 看起来是接口(interface)的实现,它只是阻塞直到读取是可能的,然后大概一些更高的调用者会读取并缓冲实际数据。因此,可以通过通用接口(interface)优化和实现轮询调用,而无需对所有数据进行双缓冲。因此,内部类略微重载了 read_some 的含义,并且在此实现中,未使用 buffers 参数,因此传递了一个虚拟参数。

关于c++ - 读取描述符(ioctl、fcntl),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18516726/

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