我怎么知道我是唯一一个打开文件句柄的人?

时间:2010-01-25 07:58:17

标签: c++ solaris

我遇到的情况是我需要从目录中获取文件并尽快处理它们。将文件输入到此目录的过程是以非常快的速度写入它们(在高峰时间每分钟高达一千次),我需要将它们拉出来并在它们到达时处理它们。

我遇到的一个问题是知道我的C ++代码已经打开了发送服务器已经完成的文件 - 也就是说,本地FTP服务器仍然没有写入。

在Solaris下,我如何打开一个文件并100%确定地知道其他人没有打开文件?

我应该注意,一旦文件被写入并关闭它,其他服务器将不再打开它,所以如果我可以打开它并且知道我有独家访问权限,我不需要担心检查我仍然是唯一拥有该文件的人。

2 个答案:

答案 0 :(得分:1)

您可以将flock()与LOCK_EX操作一起使用以确保独占访问。 fcntl()是另一种可能的方式

#include <sys/file.h>

int flock(int fd, int operation);   

编辑:两种方法,找到一个ftp服务器,在接收过程中锁定文件。 如果你监控ftp服务器进程,使用pfiles或lsof(这里可以使用http://www.sunfreeware.com/)来确保没有其他人正在访问这些文件,我担心你不会100%安全。

也许你可以检查一下这些文件的时间戳,如果它们几分钟内没有改变,那么获取,处理或用它们做些什么是安全的。

答案 1 :(得分:0)

将文件提供到目录中的进程是否归您所有?如果是这种情况,则将文件的扩展名重命名为.working,这样就不会选择正在使用的文件。

编辑:因为你说它是solaris,所以编写一个shell脚本并使用pfiles命令来检查进程是否仍然使用你想要使用的文件。如果没有开始处理文件。