2012-07-06 292 views
1

我正在用C++编写一个模块,它将在一组机器上运行,所有这些机器都有一个nfs挂载文件存储。避免在NFS共享文本文件上同时写入

我有一个配置文件与所有的机器通过NFS共享;并且所有人都可以读取/写入该文件。如何确保不会因同时访问而导致数据损坏?

我知道NFS有自己的锁定协议,但我看到它不可靠 - concurrent nfs access。我也看到iNotify在nfs安装的驱动器上不太好 - inotifiy example。我不确定stat将有助于检查在写入/读取之前是否正在访问文件。

如何在C++中实现一个简单的锁定机制以避免同时访问?

+2

...通过不尝试同时写入同一文件。写入文件的唯一副本,并使用重命名重新转向旧文件。 – Petesh 2012-07-06 20:09:50

+0

......换句话说,如果文件是本地文件,则完全可能与您应该做的事情完全相同。 – Celada 2012-07-06 20:16:49

+0

这对我来说不是一个选项,因为文件(使用它的fd)正在被IPC(unix域套接字)跟踪以进行更改。所做的更改将传回模块以供进一步处理。 – sillysheep 2012-07-06 20:18:51

回答

0

当您将内容A,B和C同时写入通过NFS共享的文件时,最终内容可能是ABC或任何ABC的可能组合,如BAC,CAB等。文件将始终为一致,它将永远不会写A部分,其次是B,因此写一个接一个地发生。请注意,只有当内容大小在NFS块大小范围内时才会如此。

如果写入超出块大小,则需要使用NLM,这需要在NFS服务器和客户端上运行锁定守护进程。

+0

我没有框架的问题标题正确,我的坏,我想避免同时'访问',而不仅仅是写道。即使同时写入不会是一个问题,同时读/写将是。一个锁定机制,以避免这是我感兴趣的。 – sillysheep 2012-07-10 04:31:18