gpt4 book ai didi

c - 对使用 O_DIRECT 打开的文件执行 'write' 后的用户缓冲区

转载 作者:太空狗 更新时间:2023-10-29 11:09:54 26 4
gpt4 key购买 nike

我正在使用 O_DIRECT 标志直接从用户缓冲区写入磁盘。但据我了解,Linux 不保证在调用之后写入数据。它只是使用 DMA 或其他任何方式直接从用户缓冲区写入物理设备......因此,我不明白在调用“write”函数后是否可以写入用户缓冲区。

我确信示例代码将有助于理解我的问题:

char *user_buff = malloc(...); /* assume it is aligned as needed */
fd = open(..., O_DIRECT);
write(fd, ...)
memset(user_buff, 0, ...)

最后一行(memset)是否合法?写入 DMA 可能用来将数据传输到设备的用户缓冲区是否有效?

最佳答案

这是合法的。这里没有发生“环回” - 考虑一下如果您使用动态分配的数组应该做什么。你能在 write() 之后释放它吗?你不能吗? - 嗯,答案是 write() 函数(和系统调用)在返回后不会修改或访问用户缓冲区 - 如果无法执行立即写入,则复制数据将被制作。您不必担心实现细节(毕竟这是拥有 C 标准库的目的……)

关于c - 对使用 O_DIRECT 打开的文件执行 'write' 后的用户缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13658741/

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