我正在使用 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/