linux – 在写操作后获取errno
发布时间:2020-12-14 02:03:27 所属栏目:Linux 来源:网络整理
导读:我有以下Go代码,它最终将填满磁盘并且使用ENOSPC失败(仅仅是一个概念验证).如何从os.Write返回的错误中确定它确实因ENOSPC而失败(所以我需要一种方法在写入操作后获取errno)? package mainimport ( "log" "os")func main() { fd,_ := os.Create("dump.txt")
我有以下Go代码,它最终将填满磁盘并且使用ENOSPC失败(仅仅是一个概念验证).如何从os.Write返回的错误中确定它确实因ENOSPC而失败(所以我需要一种方法在写入操作后获取errno)?
package main import ( "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 main import ( "log" "os" "syscall" ) func main() { fd,err := fd.Write(buf) if err != nil { log.Printf("%T %vn",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 device 2015/02/15 10:13:27 type assert not ok 解决方法
文件操作一般返回
*os.PathError ;将错误转换为os.PathError并使用Err字段检查根本原因,如下所示:
patherr,ok := err.(*os.PathError) if ok && patherr.Err == syscall.ENOSPC { log.Println("Out of disk space!") } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |