在我的Go应用程序中,我不想写一个临时文件,而是在完成所有操作后写一个重命名为最终文件的临时文件。这是为了避免应用程序崩溃时在文件中保留部分写入的内容。
当前,我使用ioutil.TempFile,但是问题在于它创建的文件具有0600权限,而不是0666。因此,对于典型的umask值,它会获得0600权限,而不是0644或0660。这不是目标文件的问题。已经存在,因为我可以将临时权限修改为许多现有权限,但是如果文件不存在,则需要某种方式来推断当前的umask。
我想我可以复制ioutil.TempFile实现,将0666传递给os.OpenFile,但这听起来并不好。那么问题是有更好的方法吗?
最佳答案
我不太理解你的问题。
必须使用尽可能严格的权限来创建临时文件,因为拥有它们的整个想法是为您的应用程序提供安全的方式来临时存储太大而无法容纳在内存中的数据(或将生成的文件移交给另一个进程) 。 (请注意,在POSIX系统上,打开的文件被视为对其的实时引用,习惯上甚至在打开文件时立即将其删除,这样除了从创建它的过程中写入文件之外,没有其他方法可以修改其数据。 )
因此,我认为您正在尝试对问题使用错误的解决方案。
因此,在您这样的情况下,我要做的是:
如果您觉得使用固定的后缀是la脚,则可以“窃取”从
ioutil.TempFile()
中选择唯一的无冲突文件名的实现。但是,海事组织这会太过费劲。关于go - ioutil.TempFile和umask,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35337046/