写入非现有文件没有错误?

时间:2015-12-17 01:23:26

标签: go

如果我在写之前删除文件,为什么f.Write()不会返回任何错误?

package main

import (
    "fmt"
    "os"
    "time"
)

func main() {
    f, err := os.Create("foo")
    if err != nil {
        panic(err)
    }

    if err := os.Remove("foo"); err != nil {
        panic(err)
    }

    if _, err := f.Write([]byte("hello")); err != nil {
        panic(err) // would expect panic here
    }

    fmt.Println("no panic?")
}

http://play.golang.org/p/0QllIB6L9O

1 个答案:

答案 0 :(得分:1)

显然这是预料之中的。

  

当您删除文件时,您确实删除了该文件的链接(到inode)。如果某人已经打开了该文件,他们就会保留他们拥有的文件描述符。该文件保留在磁盘上,占用空间,如果您有权访问它,可以写入和读取。

来源:https://unix.stackexchange.com/questions/146929/how-can-a-log-program-continue-to-log-to-a-deleted-file