【问题标题】:Extend asynchronous file io in boost::asio to Mac OS X将 boost::asio 中的异步文件 io 扩展至 Mac OS X
【发布时间】:2010-01-14 09:31:22
【问题描述】:

boost::asio 包包含用于在 Windows 中使用 IO 完成端口执行异步文件 io 的类。据我了解,asio 包中包含的其他平台不支持异步文件 io。

我想知道需要做些什么来扩展 asio 以至少支持 Mac OS X 的异步文件 io,但在某种程度上也支持 Linux。我最感兴趣的是在 asio 方面需要做什么,但由于我对 Mac OS X 编程没有那么丰富的经验,我不介意在哪里可以找到有关如何执行异步文件 io 的更多信息的指针Mac OS X 也是 - PBReadForkAsync 是我应该看的吗?

更新: 我终于开始尝试使用 aio_read/aio_write 在 Mac OS X 上构建异步文件 io(在 boost::asio 之外),但是我无法获得所需的回调数据(请参阅How to get user data for aio signal handler in Mac OS X)。

【问题讨论】:

    标签: c++ macos boost boost-asio


    【解决方案1】:

    根据此页面,boost::asio 可以在 OS X 上运行,但有一个小限制:http://www.boost.org/doc/libs/1_37_0/doc/html/boost_asio/overview/implementation.html

    【讨论】:

    • Asio 可以在 Mac OS X 下工作,但是异步文件 io 不可用。根据文档:Boost.Asio 包括添加的类,以允许在 POSIX 文件描述符上执行同步和异步读写操作,例如管道、标准输入和输出以及各种设备(但不是常规文件)。 (boost.org/doc/libs/1_41_0/doc/html/boost_asio/overview/posix/…)。
    • 更新了问题,更清楚地表明它只有 asio 包的文件 io 部分对于 Windows 以外的其他平台“缺失”。
    • 对不起,我也错过了。我认为更好的方法是将 OS X 视为 POSIX 系统,这样您也可以获得通用的 Unixen 和 Linux。请参阅aio_read(2) 系统调用和man aio。然后也许将课程提交给 Boost,因为这确实应该在那里。
    • 不幸的是 aio_read 等人仅支持在 Mac OS X 上使用信号报告完成。此外,Mac OS X 不提供将任何用户数据发送到信号处理程序的方法,因此无法准确知道完成了哪个操作。因此,我在单独的线程中执行同步 io 操作要容易得多(根据我的另一个问题:stackoverflow.com/q/5116151/227322)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    相关资源
    最近更新 更多