gpt4 book ai didi

c - 向设备发送数据时 UNIX read()/write() 的原子性

转载 作者:IT王子 更新时间:2023-10-29 01:27:04 26 4
gpt4 key购买 nike

当直接写入/dev 中的设备时,我打开一个文件描述符并执行 UNIX write(),然后执行 read()。我能否让多个线程在相同 文件描述符上执行此 write()/read() 序列,并且如果两个线程同时进入 write() 函数则不会得到困惑的数据?

对 std 文档的引用将非常有帮助。我什么也没找到。有人提到这样的操作在内核中是原子的,但我持怀疑态度。

此外,要澄清这是/dev 中的一个文件,因此任何关于“文件指针”概念在此处适用范围的任何见解也很有帮助。

最佳答案

文件指针(例如FILE *fp)是位于函数调用(例如write())之上的用户端代码中的一层。对 fp 的访问由线程环境中的锁控制(您不能让线程同时修改同一结构)。

在内核内部,我希望文件描述符(和/或“打开文件描述”)上有一个锁,以防止它同时被两个线程使用。

您可以查找 read() 的 POSIX 规范和 getchar_unlocked()了解有关锁定等的更多信息——至少对于符合 POSIX 的实现。

注意 POSIX 仍然使用 C99。因此,它不认识 C11 线程设施。 C11 标准没有 read() 等(使用文件描述符的文件 I/O),因此它对此类系统调用只字不提。它也不提供 getchar_unlocked() 或其任何亲属。

关于c - 向设备发送数据时 UNIX read()/write() 的原子性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18411031/

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