gpt4 book ai didi

c - `open`和 `close`如何异步串口?

转载 作者:太空宇宙 更新时间:2023-11-04 10:23:57 33 4
gpt4 key购买 nike

我正在尝试以异步方式使用串口。我可以使用 selectpollepollO_NONBLOCK 来进行异步读写。但是 openclose 呢?

我已经看到 close block 超过一秒钟了。

最佳答案

很少有操作系统实现真正的异步open()close()(将O_NONBLOCK 指定为open( ) 表示不要等待连接或输入,而不是真正在后台执行操作)。想到的两个是 QNX 和 Hurd,它们都是微内核操作系统设计,其中每个系统调用根据定义都是可复用的,因此是异步的。

至于为什么,从历史上看,在 open() 完成之前您不能做任何事情,因此 API 设计者从来没有想过让它异步。最近,如果您真的希望它是异步的,请从线程池进行调用。 close() 更有趣一点,实际上很难在不丢失有值(value)信息的情况下快速关闭文件描述符,丢失这些信息会导致数据丢失,例如“我刚刚尝试写出的缓冲数据失败了”。但是同样,如果您真的需要 close() 是异步的,只需从线程池中调用它即可。

作为一般规则,如果您多次调用 open()close(),您就不能期望高性能。两者都不可避免地涉及让内核运行大量代码检查 perms、分配内核结构、锁定内核结构等。通常对于高性能文件 i/o,例如,您在开始时打开您需要的文件并且从不关闭它们。这在大多数操作系统上都非常出色。

关于c - `open`和 `close`如何异步串口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42514338/

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