似乎默认的os.Open
调用允许另一个进程写入打开的文件,但不能删除它。 是否也可以启用删除? 在.NET中,可以使用FileShare.Delete
标志来完成,在Go中有没有类似的东西?
os.Open
会得到一个标志O_RDONLY
设置的O_RDONLY
; 这意味着只读。 你可以使用os.OpenFile
指定你自己的标志
O_RDONLY int = syscall.O_RDONLY // open the file read-only. O_WRONLY int = syscall.O_WRONLY // open the file write-only. O_RDWR int = syscall.O_RDWR // open the file read-write. O_APPEND int = syscall.O_APPEND // append data to the file when writing. O_CREATE int = syscall.O_CREAT // create a new file if none exists. O_EXCL int = syscall.O_EXCL // used with O_CREATE, file must not exist O_SYNC int = syscall.O_SYNC // open for synchronous I/O. O_TRUNC int = syscall.O_TRUNC // if possible, truncate file when opened.
但是,这些模式都不会让您在一个文件上拥有多个作者。 您可以通过exec
-ing或fork
-ing共享文件描述符,但是从两个进程中天真地写入文件将导致操作系统决定如何同步这些写入 – 这几乎不是您想要的。
当一个进程有一个FD时,删除一个文件在类Unix系统上并不重要。 我会继续,并假定Windows不会那样。
编辑给定的Windows标记和@ Not_a_Golfer的优秀观察:
您应该能够将syscall.FILE_SHARE_DELETE
作为标志os.OpenFile
给Windows上的os.OpenFile
,如果这样可以解决您的问题。
如果你需要把几个标志合并起来,你可以把它们合起来:
syscall.FILE_SHARE_DELETE | syscall.SOME_OTHER_FLAG | syscall.AND_A_THIRD_FLAG
(但是请注意,由您来建立一个连贯的标志)