linux – 在写 *** 作后获取errno

linux – 在写 *** 作后获取errno,第1张

概述我有以下Go代码,它最终将填满磁盘并且使用ENOSPC失败(仅仅是一个概念验证).如何从os.Write返回的错误中确定它确实因ENOSPC而失败(所以我需要一种方法在写入 *** 作获取errno)? package mainimport ( "log" "os")func main() { fd, _ := os.Create("dump.txt") de 我有以下Go代码,它最终将填满磁盘并且使用ENOSPC失败(仅仅是一个概念验证).如何从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,err := fd.Write(buf)        if err != nil {            log.Printf("%T %v\n",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
解决方法 文件 *** 作一般返回 *os.PathError;将错误转换为os.pathError并使用Err字段检查根本原因,如下所示:

patherr,ok := err.(*os.pathError)if ok && patherr.Err == syscall.ENOSPC {    log.Println("Out of disk space!")}
总结

以上是内存溢出为你收集整理的linux – 在写 *** 作后获取errno全部内容,希望文章能够帮你解决linux – 在写 *** 作后获取errno所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/yw/1031541.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存