首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对用O_DIRECT打开的文件执行'write‘操作后的用户缓冲区

问对用O_DIRECT打开的文件执行'write‘操作后的用户缓冲区
EN

Stack Overflow用户
提问于 2012-12-01 18:59:09
回答 2查看 491关注 0票数 3

我使用O_DIRECT标志直接从用户缓冲区写入磁盘。但据我所知,Linux不能保证在这个调用之后,数据会被写入。它只是使用DMA或其他任何东西直接从用户缓冲区写入物理设备...因此,我不知道在调用“write”函数后是否可以写入用户缓冲区。

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

代码语言:javascript
复制
char *user_buff = malloc(...); /* assume it is aligned as needed */
fd = open(..., O_DIRECT);
write(fd, ...)
memset(user_buff, 0, ...)

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

EN

回答 2

Stack Overflow用户

发布于 2012-12-01 19:04:05

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

票数 2
EN

Stack Overflow用户

发布于 2012-12-01 19:29:59

将O_SYNC标志与O_DIRECT一起使用。然后,您可以确保在write()返回时数据已经写入。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13658741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档