我正在使用O_DIRECT
标志直接从用户缓冲区写入磁盘。
但据我了解,Linux不能保证在此调用之后就写入数据。
它只是使用DMA或其他方式直接从用户缓冲区写入物理设备...
因此,我不知道在调用“写入”功能后是否可以写入用户缓冲区。
我确信示例代码将有助于理解我的问题:
char *user_buff = malloc(...); /* assume it is aligned as needed */
fd = open(..., O_DIRECT);
write(fd, ...)
memset(user_buff, 0, ...)
最后一行(内存集)合法吗?写入用户缓冲区是否有效,DMA可能会将其用于将数据传输到设备?
最佳答案
是合法的这里没有发生“回送”-考虑使用动态分配的数组应该怎么做。您可以在write()
之后将其释放吗?可以吗-好吧,答案是write()
函数(和syscall)在返回后不会修改或访问用户缓冲区-如果无法执行立即写操作,则将复制数据。您不必担心实现细节(毕竟,这是拥有C标准库的目的……)