源码 WriteString unsafeheader.Slice

src\os\file.go

 

// WriteString is like Write, but writes the contents of string s rather than
// a slice of bytes.
func (f *File) WriteString(s string) (n int, err error) {
    var b []byte
    hdr := (*unsafeheader.Slice)(unsafe.Pointer(&b))
    hdr.Data = (*unsafeheader.String)(unsafe.Pointer(&s)).Data
    hdr.Cap = len(s)
    hdr.Len = len(s)
    return f.Write(b)
}

 

// Write writes len(b) bytes from b to the File.
// It returns the number of bytes written and an error, if any.
// Write returns a non-nil error when n != len(b).
func (f *File) Write(b []byte) (n int, err error) {
    if err := f.checkValid("write"); err != nil {
        return 0, err
    }
    n, e := f.write(b)
    if n < 0 {
        n = 0
    }
    if n != len(b) {
        err = io.ErrShortWrite
    }

    epipecheck(f, e)

    if e != nil {
        err = f.wrapErr("write", e)
    }

    return n, err
}

 

posted @ 2022-05-18 17:44  papering  阅读(50)  评论(0编辑  收藏  举报