当我的程序将数据写入文件时,问题出现在Windows中,同时,我尝试使用其他工具打开该文件。它抱怨并且不打开文件,因为它是由其他进程打开的。
googleing之后,我已经读过为了避免这种情况,在windows中,你必须使用SHARE_FILE_READ和SHARE_FILE_WRITE标志创建文件,但问题是我的程序是用C语言编写的,我只是使用标准的开放式系统调用..
有没有办法告诉cygwin将该共享模式添加到我的程序正在打开的文件中?
答案 0 :(得分:1)
问题是打开文件的两个进程必须使用兼容的共享模式才能成功。 Cygwin正在使用正确的共享模式打开文件,但其他程序不是。
对于非磁带驱动器的特殊设备文件的所有文件,Cygwin通过以NtCreateFile
(相当于FILE_SHARE_VALID_FLAGS
)的共享模式调用FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE
打开它们 - 请参阅执行fhandler.cc
中的fhandler_base::open()
fopen()
,open()
,{{1}}等等都在幕后使用。
您需要说服其他程序使用正确的共享模式打开文件;如果它使用0的共享模式(不共享),那么Cygwin如何打开文件并不重要 - 在这种情况下程序将始终获得共享冲突。