猿问

写操作后得到 errno

隔江千里
浏览 161回答 2
2回答

qq_花开花谢_0

我有以下 Go 代码,它们最终会填满磁盘并失败ENOSPC(只是一个概念证明)。我如何从err返回的结果中os.Write确定它确实失败了ENOSPC(所以我需要一种errno在写操作后抓取的方法)?package mainimport (    "log"    "os")func main() {    fd, _ := os.Create("dump.txt")    defer fd.Close()    for {        buf := make([]byte, 1024)        _, err := fd.Write(buf)        if err != nil {            log.Fatalf("%T %v", err, err)        }    }}编辑:按照@FUZxxl 的建议更新程序:package mainimport (    "log"    "os"    "syscall")func main() {    fd, _ := os.Create("dump.txt")    defer fd.Close()    for {        buf := make([]byte, 1024)        _, err := fd.Write(buf)        if err != nil {            log.Printf("%T %v\n", err, err)            errno, ok := err.(syscall.Errno)            if ok {                log.Println("type assert ok")                if errno == syscall.ENOSPC {                    log.Println("got ENOSPC")                }            } else {                log.Println("type assert not ok")            }            break        }    }}但是,我没有得到预期的结果。这是输出:2015/02/15 10:13:27 *os.PathError write dump.txt: no space left on device2015/02/15 10:13:27 type assert not ok

慕姐4208626

文件操作通常返回一个*os.PathError; 强制err转换os.PathError并使用该Err字段来检查根本原因,如下所示:patherr, ok := err.(*os.PathError)if ok && patherr.Err == syscall.ENOSPC {    log.Println("Out of disk space!")}
随时随地看视频慕课网APP

相关分类

Go
我要回答