os包中实现了平台无关的接口,设计向Unix风格,但是错误处理是go风格,当os包使用时,如果失败之后返回错误类型而不是错误数量.

Variables

  1. var (
  2. Stdin = NewFile(uintptr(syscall.Stdin), "/dev/stdin") //系统标准输入
  3. Stdout = NewFile(uintptr(syscall.Stdout), "/dev/stdout") //系统标准输出
  4. Stderr = NewFile(uintptr(syscall.Stderr), "/dev/stderr") //系统标准错误输出
  5. )
  6. const DevNull = "/dev/null"
  7. var Args []string // Args保管了命令行参数,第一个是程序名。按空格符分割

image.png

func

  1. // 让当前程序以给出的状态码code退出。程序会立刻终止,defer的函数不会被执行。
  2. func Exit(code int)
  3. func Hostname() (name string, err error) //获取主机名
  4. func Getuid() int //返回调用者的用户ID。
  5. func Geteuid() int //返回调用者的有效用户ID。
  6. func Getgid() int //Getgid返回调用者的组ID。
  7. func Getegid() int //返回调用者的有效组ID。
  8. func Getgroups() ([]int, error)//返回调用者所属的所有用户组的组ID。
  9. func Getpid() int //返回调用者所在进程的进程ID。
  10. func Getppid() int//返回调用者所在进程的父进程的进程ID。
  11. func Getwd() (dir string, err error) //获取当前目录,类似linux中的pwd
  12. func Getenv(key string) string //获取系统key的环境变量,如果没有环境变量就返回空
  13. func Executable() (string, error) // 返回可执行程序绝对路径,包括可执行程序本身
  14. func IsPathSeparator(c uint8) bool //返回字符c是否是一个路径分隔符。
  15. func IsExist(err error) bool // 报告文件是否存在
  16. func IsNotExist(err error) bool // 报告文件是否不存在
  17. func IsPermission(err error) bool // 错误是否是权限不足
  18. func Chdir(dir string) error //chdir将当前工作目录更改为dir目录.
  19. func Chmod(name string, mode FileMode) error //修改name指定的文件对象的mode
  20. func Chown(name string, uid, gid int) error//改name指定的文件对象的用户id和组id
  21. // 创建一个从oldname指向newname的硬连接,对一个进行操作,则另外一个也会被修改.
  22. func Link(oldname, newname string) error
  23. // 创建一个从oldname指向newname的硬连接,对一个进行操作,则另外一个也会被修改.
  24. func Mkdir(name string, perm FileMode) error 
  25. // 创建一个新目录,该目录是利用路径(包括绝对路径和相对路径)进行创建的,
  26. // 如果需要创建对应的父目录,也一起进行创建,如果已经有了该目录,则不进行新的创建
  27. // 当创建一个已经存在的目录时,不会报错.
  28. func MkdirAll(path string, perm FileMode) error 
  29. func Readlink(name string) (string, error) //返回符号链接的目标。如果出错 *PathError类型。
  30. func Remove(name string) error //删除文件或者目录
  31. func RemoveAll(path string) error //删除目录以及其子目录和文件,如果不存在,返回nil
  32. // 重命名文件,如果oldpath不存在,则报错no such file or directory
  33. func Rename(oldpath, newpath string) error 
  34. // 查看f1和f2这两个是否是同一个文件,如果再Unix系统,这意味着底层结构的device和inode完全一致
  35. func SameFile(fi1, fi2 FileInfo) bool 
  36. func DirFS(dir string) fs.FS // 返回以目录dir为根目录的文件树的文件系统(fs.FS)

type DirEntry

  1. type DirEntry = fs.DirEntry
  2. func ReadDir(name string) ([]DirEntry, error)

type FileMode

  1. type FileMode uint32
  2. func (m FileMode) IsDir() bool //报告m是否是一个目录。
  3. func (m FileMode) IsRegular() bool. //报告m是否是一个普通文件。
  4. func (m FileMode) Perm() FileMode //返回m的Unix权限位。
  5. func (m FileMode) String() string

type FileInfo

  1. type FileInfo interface {
  2. Name() string // 文件的名字,含后缀(不含扩展名)
  3. Size() int64 // 普通文件返回值表示其大小;其他文件的返回值含义各系统不同
  4. Mode() FileMode // 文件的模式位
  5. ModTime() time.Time // 文件的修改时间
  6. IsDir() bool // 等价于Mode().IsDir()
  7. Sys() interface{} // 底层数据来源(可以返回nil)
  8. }

func Stat(name string) (fi FileInfo, err error)

  • 返回一个描述name指定的文件对象的FileInfo。如果指定的文件对象是一个符号链接,返回的FileInfo描述该符号链接指向的文件的信息,本函数会尝试跳转该链接

func Lstat(name string) (fi FileInfo, err error)

  • Lstat返回一个描述name指定的文件对象的FileInfo。如果指定的文件对象是一个符号链接,返回的FileInfo描述该符号链接的信息,本函数不会试图跳转该链接。

type File

  1. type File struct {
  2. // 内含隐藏或非导出字段
  3. }

File代表一个打开的文件对象。文件对象已经实现了io.Reader,io.Writer中定义的方法

func Create(name string) (file *File, err error)

  • 采用模式0666(任何人都可读写,不可执行)创建一个名为name的文件

func Open(name string) (file *File, err error)

  • 打开一个文件,返回文件描述符,该文件描述符只有只读权限.他相当于OpenFile(name string,O_RDWR,0)

func OpenFile(name string, flag int, perm FileMode) (file *File, err error)

  • 指定文件权限和打开方式打开name文件或者create文件

打开标记:

func Pipe() (r File, w File, err error)//Pipe返回一对关联的文件对象。从r的读取将返回写入w的数据

func (f *File) Name() string

func (f *File) Stat() (fi FileInfo, err error)

func (f *File) Fd() uintptr

func (f *File) Chdir() error

func (f *File) Chmod(mode FileMode) error

func (f *File) Chown(uid, gid int) error

func (f *File) Read(b []byte) (n int, err error)

func (f *File) Write(b []byte) (n int, err error)

func (f *File) WriteString(s string) (ret int, err error)

func (f *File) Seek(offset int64, whence int) (ret int64, err error)

  • Seek设置下一次读/写的位置。offset为相对偏移量,而whence决定相对位置:0为相对文件开头,1为相对当前位置,2为相对文件结尾。它返回新的偏移量(相对开头)和可能的错误。

func (f *File) ReadAt(b []byte, off int64) (n int, err error)

  • ReadAt从指定的位置(off)(相对于文件开始位置)读取len(b)字节数据并写入b。它返回读取的字节数和可能遇到的任何错误。当n<len(b)时(读取出错或读到文件结尾),本方法总是会返回错误;如果是因为到达文件结尾,返回值err会是io.EOF

func (f *File) WriteAt(b []byte, off int64) (n int, err error)

  • WriteAt在指定的位置(off)(相对于文件开始位置)写入len(b)字节数据。它返回写入的字节数和可能遇到的任何错误。如果返回值n!=len(b),本方法会返回一个非nil的错误。

func (f *File) Sync() (err error) //将文件系统的最近写入的数据在内存中的拷贝刷新到硬盘中稳定保存。

func (f *File) Close() error //关闭文件f

type ProcAttr

  1. type ProcAttr struct {
  2. // 如果Dir非空,子进程会在创建进程前先进入该目录。(即设为当前工作目录)
  3. Dir string
  4. // 如果Env非空,它会作为新进程的环境变量。必须采用Environ返回值的格式。
  5. // 如果Env为空字符串,将使用Environ函数的返回值。
  6. Env []string
  7. // Files指定被新进程继承的活动文件对象。
  8. // 前三个绑定为标准输入、标准输出、标准错误输出。
  9. // 依赖底层操作系统的实现可能会支持额外的数据出入途径。
  10. // nil条目相当于在进程开始时关闭的文件对象。
  11. Files []*File
  12. // 操作系统特定的创建属性。
  13. // 注意设置本字段意味着你的程序可能会运作失常甚至在某些操作系统中无法通过编译。
  14. Sys *syscall.SysProcAttr
  15. }

ProcAttr保管将被StartProcess函数用于一个新进程的属性。

type Process

Process保管一个被StarProcess创建的进程的信息

  1. type Process struct {
  2. Pid int
  3. // 内含隐藏或非导出字段
  4. }

func FindProcess(pid int) (p *Process, err error) FindProcess根据进程id查找一个运行中的进程

func StartProcess(name string, argv []string, attr ProcAttr) (Process, error)

  • StartProcess使用提供的属性、程序名、命令行参数开始一个新进程。StartProcess函数是一个低水平的接口。os/exec包提供了高水平的接口,应该尽量使用该包。如果出错,错误的底层类型会是*PathError。

func (p *Process) Signal(sig Signal) error Signal方法向进程发送一个信号, 在windows中未实现

func (p *Process) Kill() error Kill让进程立刻退出

func (p Process) Wait() (ProcessState, error)

  • Wait方法阻塞直到进程退出,然后返回一个描述ProcessState描述进程的状态和可能的错误。Wait方法会释放绑定到进程p的所有资源。在大多数操作系统中,进程p必须是当前进程的子进程,否则会返回错误。

func (p *Process) Release() error

  • Release释放进程p绑定的所有资源, 使它们(资源)不能再被(进程p)使用。只有没有调用Wait方法时才需要调用本方法。

type ProcessState

ProcessState保管Wait函数报告的某个进程的信息。

  1. type ProcessState struct {
  2. // 内含隐藏或非导出字段
  3. }

func (p *ProcessState) Pid() int 返回一个已退出的进程的进程id

func (p *ProcessState) Exited() bool Exited报告进程是否已退出

func (p *ProcessState) Success() bool Success报告进程是否成功退出,如在Unix里以状态码0退出。

func (p *ProcessState) SystemTime() time.Duration 返回已退出进程及其子进程耗费的系统CPU时间

func (p *ProcessState) UserTime() time.Duration 返回已退出进程及其子进程耗费的用户CPU时间

func (p *ProcessState) Sys() interface{}

  • Sys返回该已退出进程系统特定的退出信息。需要将其类型转换为适当的底层类型,如Unix里转换为*syscall.WaitStatus类型以获取其内容。

func (p *ProcessState) SysUsage() interface{}

  • SysUsage返回该已退出进程系统特定的资源使用信息。需要将其类型转换为适当的底层类型,如Unix里转换为*syscall.Rusage类型以获取其内容。

func (p *ProcessState) String() string

type Signal

  1. type Signal interface {
  2. String() string
  3. Signal() // to distinguish from other Stringers
  4. }
  5. var (
  6. Interrupt Signal = syscall.SIGINT
  7. Kill Signal = syscall.SIGKILL
  8. )