在不同的平台上有不同的东西吗?

Sna*_*zer 3 c++ file-io cross-platform file

我在C++中编写一个并发的持久性消息队列,它需要对文件进行并发读访问,而不使用内存映射io.简短的故事是,几个线程需要从文件的不同偏移量中读取.

最初我有一个具有典型读/写方法的文件对象,并且线程将获取一个互斥锁来调用这些方法.但是,碰巧我没有在某处正确获取互斥锁,导致一个线程在读/写期间移动文件偏移量,另一个线程将开始读/写文件的不正确部分.

所以,偏执的解决方案是每个线程有一个打开的文件句柄.现在我对同一个文件有很多文件句柄,我假设它不是很好.

我想使用类似pread的东西,它允许将当前偏移量传递给读/写函数.

但是,该功能仅适用于linux,我需要在windows,aix,solaris和hpux上进行等效实现,有什么建议吗?

jpa*_*cek 6

在Windows上,ReadFile()函数可以执行此操作,请参阅async IO上lpOverlapped参数和此信息.