C++ (Windows)同时打开同一文件

C++ (Windows)同时打开同一文件,c++,c,windows,C++,C,Windows,我正在尝试在windows中打开一个文件,以便同时进行写入和读取。 我有一个程序(每隔一秒钟)写入文件,还有一个程序从中读取。在unix中,它可以很好地工作,但在windows中不工作(我无法打开已打开的文件)。 我用fopen()打开文件 我怎样才能解决这个问题 EDIT2: 查看它使用的文件*,并相应地设置共享标志 编辑: 首先,一些代码:这是我用来打开文件的方式 FILE* f = NULL; int res = fopen_s(&f, "c:\\temp\\

我正在尝试在windows中打开一个文件,以便同时进行写入和读取。 我有一个程序(每隔一秒钟)写入文件,还有一个程序从中读取。在unix中,它可以很好地工作,但在windows中不工作(我无法打开已打开的文件)。 我用fopen()打开文件

我怎样才能解决这个问题

EDIT2:

查看它使用的
文件*
,并相应地设置共享标志

编辑:

首先,一些代码:这是我用来打开文件的方式

   FILE* f = NULL;
        int res = fopen_s(&f, "c:\\temp\\File1.txt", "w");
        if (res != 0) return;

        while (true) {
            Sleep(1000);
            fprintf_s(f , "Some data");
        }
        fclose(f); 
读数在其他应用程序中,但它确实是
fscanf

固定代码:

char d[] = "data";


HANDLE h = CreateFile("c:\\temp\\f.txt", GENERIC_READ | GENERIC_WRITE,
    FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, CREATE_ALWAYS, /*FILE_ATTRIBUTE_NORMAL*/ FILE_FLAG_WRITE_THROUGH, NULL);

if (h == INVALID_HANDLE_VALUE) return 0;

DWORD bytesW;
while(true) {
    Sleep(100);
        WriteFile(h, d, strlen(d), &bytesW, NULL);
}

CloseHandle(h);
return 0; 

Windows和Linux都有打开文件的默认方式,
fopen
默认使用这种方式

在Windows中,这意味着阻塞(一次只能有一个进程打开一个文件)

在Linux中,它意味着无阻塞


fopen
是一种高级API。要自行选择文件的阻止策略,对于Windows,应使用WinAPI。特别是,请看一下共享标志的

也许这会有所帮助:也许可以添加在unix上工作的简单示例(如打开和睡眠)程序,这样做对其他人来说就更容易了。请显示代码。在VS 2008到VS 2012上的快速测试表明,使用
fopen()
同时打开文件进行写入和读取没有问题(
fopen()
使用
file\u SHARE\u READ | file\u SHARE\u WRITE
访问)。嗨,我很快会发布一些代码并回答这个问题。。。谢谢这个答案不正确-
fopen()
在Windows上打开允许共享的文件。OpenFile不是被CreateFile取代的古老功能吗?我在过去4年左右没有做过Windows编程:-\。OpenFile是我记得详细信息的Windows API之一,但它可能已被弃用。