如何解决为什么在Go中写入已删除的文件不会返回错误?
此程序即使正在写入已删除的文件也成功运行。为什么这样做有效?
CREATE TEMPORARY TABLE temp_table_name
SELECT Field1,Field2,FieldN FROM original_tableA
LIMIT 0;
INSERT INTO temp_table_name
SELECT Field1,FieldN
FROM TABLE_B;
INSERT INTO temp_table_name
SELECT Field1,FieldN
FROM TABLE_B;
解决方法
在类似Unix的系统上,当进程打开文件时,它会得到一个File descriptor
,它指向进程File table
的条目,而该条目又指向磁盘上的inode structure 。 inode
保留文件信息,包括data location
。
目录的内容只是成对的inode数字和名称。
如果删除文件,只需从目录中删除到inode
的链接,inode
仍然存在(只要没有从某处的链接,包括进程),数据就可以可以在data location
中进行读写。
在Windows上,此代码失败,因为Windows不允许删除打开的文件:
panic: remove test.txt: The process cannot access the file because it is being used by another process.
goroutine 1 [running]:
main.main()
D:/tmp/main.go:18 +0x1d1
exit status 2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。