github.com/code-reading/golang@v0.0.0-20220303082512-ba5bc0e589a3/go/src/os/stat_unix.go (about) 1 // Copyright 2016 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:build aix || darwin || dragonfly || freebsd || (js && wasm) || linux || netbsd || openbsd || solaris 6 // +build aix darwin dragonfly freebsd js,wasm linux netbsd openbsd solaris 7 8 package os 9 10 import ( 11 "syscall" 12 ) 13 14 // Stat returns the FileInfo structure describing file. 15 // If there is an error, it will be of type *PathError. 16 func (f *File) Stat() (FileInfo, error) { 17 if f == nil { 18 return nil, ErrInvalid 19 } 20 var fs fileStat 21 err := f.pfd.Fstat(&fs.sys) 22 if err != nil { 23 return nil, &PathError{Op: "stat", Path: f.name, Err: err} 24 } 25 fillFileStatFromSys(&fs, f.name) 26 return &fs, nil 27 } 28 29 // statNolog stats a file with no test logging. 30 func statNolog(name string) (FileInfo, error) { 31 var fs fileStat 32 err := ignoringEINTR(func() error { 33 return syscall.Stat(name, &fs.sys) 34 }) 35 if err != nil { 36 return nil, &PathError{Op: "stat", Path: name, Err: err} 37 } 38 fillFileStatFromSys(&fs, name) 39 return &fs, nil 40 } 41 42 // lstatNolog lstats a file with no test logging. 43 func lstatNolog(name string) (FileInfo, error) { 44 var fs fileStat 45 err := ignoringEINTR(func() error { 46 return syscall.Lstat(name, &fs.sys) 47 }) 48 if err != nil { 49 return nil, &PathError{Op: "lstat", Path: name, Err: err} 50 } 51 fillFileStatFromSys(&fs, name) 52 return &fs, nil 53 }