gpt4 book ai didi

file - 为什么在Go中写入已删除的文件不会返回错误?

转载 作者:行者123 更新时间:2023-12-01 21:16:37 24 4
gpt4 key购买 nike

该程序即使正在写入已删除的文件,也可以成功运行。为什么这样做?

package main

import (
"fmt"
"os"
)

func main() {
const path = "test.txt"

f, err := os.Create(path) // Create file
if err != nil {
panic(err)
}

err = os.Remove(path) // Delete file
if err != nil {
panic(err)
}

_, err = f.WriteString("test") // Write to deleted file
if err != nil {
panic(err)
}

err = f.Close()
if err != nil {
panic(err)
}

fmt.Printf("No errors occurred") // test.txt doesn't exist anymore
}

最佳答案

在类Unix系统上,当进程打开文件时,它会得到一个 File descriptor ,它指向进程File table条目,而该条目又指向磁盘上的inode structureinode保留文件信息,包括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

关于file - 为什么在Go中写入已删除的文件不会返回错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63531547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com