进程退出后是否需要文件刷新?

安特鲁

我正在使用openwrite(即直接内核调用)从一个进程中写入文件。写完之后,我简单地close退出了应用程序而没有刷新。现在,从Python包装程序启动应用程序,该应用程序退出后立即读取文件。但是有时,Python包装器读取了不正确的数据,好像我仍在读取文件的旧版本一样(即包装器读取了陈旧的数据)

我认为无论文件元数据和内容是否写入磁盘,用户可见的内容将始终有效且一致(即,缓冲区至少刷新到内存,因此后续读取将获得相同的内容,即使可能不会已提交到磁盘。)这是怎么回事?我是否需要在应用程序中关闭时进行同步?还是可以sync在从Python脚本运行应用程序之后简单地发出命令以确保一切都已正确编写?它在ext4上运行。

在Python方面:

# Called for lots of files
o = subprocess.check_output (['./App.BitPacker', inputFile]) # Writes indices.bin and dict.bin
indices = open ('indices.bin', 'rb').read ()
dictionary = open ('dict.bin', 'rb').read ()

with open ('output-file', 'wb') as output:
    output.write (dictionary) # Invalid content in output-file ...
    # output-file is a placeholder, one output-file per inputFile or course
寒地鼠

我从未遇到过您的问题,并且总是发现对close()的调用就足够了。但是,在close(2)上的man条目中:

成功关闭并不能保证已将数据成功保存到磁盘,因为内核延迟写入操作。当关闭流时,文件系统不经常刷新缓冲区。如果需要确保物理存储数据,请使用fsync(2)。(这将取决于磁盘硬件。)

因为在撰写本文时,您还没有包含用于写入过程的代码,所以我只能建议在该过程中添加对fsync的调用,看看这是否有所作为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

关闭退出后,检查进程是否正在运行VBS

来自分类Dev

刷新令牌后是否需要再次调用firebase.database.on()?

来自分类Dev

创建新进程后是否需要使用CloseHandle?

来自分类Dev

分叉后是否需要在父进程中使用wait()?

来自分类Dev

Bash是否需要刷新才能访问新文件?

来自分类Dev

scp完成后是否需要检查文件是否损坏?

来自分类Dev

退出后停止刷新页面

来自分类Dev

收到SIGTERM后,进程应多快退出?

来自分类Dev

从ssh连接退出后,进程被终止/超时

来自分类Dev

JVM退出后保持进程运行

来自分类Dev

脚本退出后执行后台进程

来自分类Dev

退出shell后,bg进程会怎样?

来自分类Dev

UNIX:在退出时是否在等待子进程?

来自分类Dev

在GAE中,创建记录后是否需要刷新以查看保存的实体?

来自分类Dev

退出父进程后无法读取子进程

来自分类Dev

(仅)以任何编程语言读取后是否需要关闭文件?

来自分类Dev

使用Python子进程检测进程是否干净退出

来自分类Dev

Symfony3提交后需要刷新

来自分类Dev

是否需要FlushFileBuffers才能跨多个进程同步文件数据?

来自分类Dev

如何停止emacs询问我是否要不保存就退出修改后的文件?

来自分类Dev

在“ if”中退出脚本时是否需要“ else”?

来自分类Dev

是否需要刷新以更新`du`命令结果?

来自分类Dev

用户退出后如何刷新端点数据?节点/反应

来自分类Dev

在Windows中,通过taskkill终止进程后,文件锁是否仍保留?

来自分类Dev

Android:在父进程彻底退出后,停止运行的Bonjour服务

来自分类Dev

Firebase一次后,节点进程不会退出

来自分类Dev

主进程退出后如何保持线程存活?

来自分类Dev

即使在python退出后,在前景中生成子进程

来自分类Dev

启动进程并在ruby脚本退出后保持其运行

Related 相关文章

  1. 1

    关闭退出后,检查进程是否正在运行VBS

  2. 2

    刷新令牌后是否需要再次调用firebase.database.on()?

  3. 3

    创建新进程后是否需要使用CloseHandle?

  4. 4

    分叉后是否需要在父进程中使用wait()?

  5. 5

    Bash是否需要刷新才能访问新文件?

  6. 6

    scp完成后是否需要检查文件是否损坏?

  7. 7

    退出后停止刷新页面

  8. 8

    收到SIGTERM后,进程应多快退出?

  9. 9

    从ssh连接退出后,进程被终止/超时

  10. 10

    JVM退出后保持进程运行

  11. 11

    脚本退出后执行后台进程

  12. 12

    退出shell后,bg进程会怎样?

  13. 13

    UNIX:在退出时是否在等待子进程?

  14. 14

    在GAE中,创建记录后是否需要刷新以查看保存的实体?

  15. 15

    退出父进程后无法读取子进程

  16. 16

    (仅)以任何编程语言读取后是否需要关闭文件?

  17. 17

    使用Python子进程检测进程是否干净退出

  18. 18

    Symfony3提交后需要刷新

  19. 19

    是否需要FlushFileBuffers才能跨多个进程同步文件数据?

  20. 20

    如何停止emacs询问我是否要不保存就退出修改后的文件?

  21. 21

    在“ if”中退出脚本时是否需要“ else”?

  22. 22

    是否需要刷新以更新`du`命令结果?

  23. 23

    用户退出后如何刷新端点数据?节点/反应

  24. 24

    在Windows中,通过taskkill终止进程后,文件锁是否仍保留?

  25. 25

    Android:在父进程彻底退出后,停止运行的Bonjour服务

  26. 26

    Firebase一次后,节点进程不会退出

  27. 27

    主进程退出后如何保持线程存活?

  28. 28

    即使在python退出后,在前景中生成子进程

  29. 29

    启动进程并在ruby脚本退出后保持其运行

热门标签

归档