1

几个月前,我用 C 语言为 linux 做了一个非常简单的程序,从套接字读取数据并将其写入磁盘。现在我想在 Windows 上运行它,所以我安装了 cygwin,一切正常。

当我的程序将数据写入文件时,问题出现在 Windows 中,同时我尝试使用另一个工具打开该文件。它抱怨并且不打开文件,因为它是由其他进程打开的。

谷歌搜索后,我读到了为避免这种情况,在 Windows 中,您必须使用 SHARE_FILE_READ 和 SHARE_FILE_WRITE 标志创建文件,但问题是我的程序是用 C 语言编写的,我只使用标准的开放系统调用。

有没有办法告诉 cygwin 将共享模式添加到我的程序正在打开的文件中?

4

1 回答 1

1

问题是打开文件的两个进程都必须使用兼容的共享模式才能成功。Cygwin 正在以正确的共享模式打开文件,但其他程序不是。

对于所有不是磁带驱动器特殊设备文件的文件,Cygwin 通过调用NtCreateFile共享模式FILE_SHARE_VALID_FLAGS(等效于FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE) 来打开它们——fhandler_base::open()参见 in的实现,fhandler.cc这就是所有在幕后使用的东西。fopen()open()

您需要说服您的其他程序以正确的共享模式打开文件;如果它使用 0 的共享模式(不共享),那么 Cygwin 如何打开文件都无关紧要——在这种情况下,程序总是会遇到共享冲突。

于 2013-05-11T17:45:33.877 回答