os包提供了操做系统函数的不依赖平台的接口。设计为Unix风格的,虽然错误处理是go风格的;失败的调用会返回错误值而非错误码。一般错误值里包含更多信息。os包的接口规定为在全部操做系统中都是一致的。非公用的属性能够从操做系统特定的syscall包获取。linux
官方连接:https://studygolang.com/pkgdocgit
=============== 函数部分 =====================github
func Hostname() (name string, err error)
Hostname返回内核提供的主机名。golang
func Getpagesize() int
Getpagesize返回底层的系统内存页的尺寸。编程
func Environ() []string
Environ返回表示环境变量的格式为"key=value"的字符串的切片拷贝。windows
func Getenv(key string) string
Getenv检索并返回名为key的环境变量的值。若是不存在该环境变量会返回空字符串。安全
func Setenv(key, value string) error
Setenv设置名为key的环境变量。若是出错会返回该错误。app
func Clearenv()
Clearenv删除全部环境变量。less
func Exit(code int)
Exit让当前程序以给出的状态码code退出。通常来讲,状态码0表示成功,非0表示出错。程序会马上终止,defer的函数不会被执行。socket
func Expand(s string, mapping func(string) string) string
Expand函数替换s中的${var}或$var为mapping(var)。例如,os.ExpandEnv(s)等价于os.Expand(s, os.Getenv)。
import os import fmt mapping := func(s string) string { m := map[string]string{"name": "xiaozhang", "age":"18"} return m[s] } data := "hello $name, you age is $age" fmt.Printf("%s", os.Expand(data, mapping)) //输出hello xiaozhang, you age is 18
func ExpandEnv(s string) string
ExpandEnv函数替换s中的${var}或$var为名为var 的环境变量的值。引用未定义环境变量会被替换为空字符串。
import os path := "GOBIN PATH $APPDATA" fmt.Println(os.ExpandEnv(path)) //输出GOBIN PATH C:\Users\sunailong\AppData\Roaming
func Getuid() int
Getuid返回调用者的用户ID。
func Geteuid() int
Geteuid返回调用者的有效用户ID。
func Getgid() int
Getgid返回调用者的组ID。
func Getegid() int
Getegid返回调用者的有效组ID。
func Getgroups() ([]int, error)
Getgroups返回调用者所属的全部用户组的组ID。
//go version:1.9, windows platform import os fmt.Println(os.ExpandEnv(path)) fmt.Println(os.Getuid()) fmt.Println(os.Geteuid()) fmt.Println(os.Getgid()) fmt.Println(os.Getgroups()) 输出: -1 //若是是unix平台返回 0 -1 //若是是unix平台返回 0 -1 //若是是unix平台返回 0 [] getgroups: not supported by windows
func Getpid() int
Getpid返回调用者所在进程的进程ID。
func Getppid() int
Getppid返回调用者所在进程的父进程的进程ID。
func IsPathSeparator(c uint8) bool
IsPathSeparator返回字符c是不是一个路径分隔符。
fmt.Println(os.IsPathSeparator('/')) //true fmt.Println(os.IsPathSeparator('|')) //false
func Getwd() (dir string, err error)
Getwd返回一个对应当前工做目录的根路径。若是当前目录能够通过多条路径抵达(由于硬连接),Getwd会返回其中一个。
func Chdir(dir string) error
Chdir将当前工做目录修改成dir指定的目录。若是出错,会返回*PathError底层类型的错误。
fmt.Println(os.Getwd()) os.Chdir("C:/") fmt.Println(os.Getwd()) 输出 // E:\projects\GoProjects\gopl.io <nil> // C:\ <nil>
func Chmod(name string, mode FileMode) error
Chmod修改name指定的文件对象的mode。若是name指定的文件是一个符号连接,它会修改该连接的目的地文件的mode。若是出错,会返回*PathError底层类型的错误。
windows 不行
func Chown(name string, uid, gid int) error
Chmod修改name指定的文件对象的用户id和组id。若是name指定的文件是一个符号连接,它会修改该连接的目的地文件的用户id和组id。若是出错,会返回*PathError底层类型的错误。uid/gid为数字
func Lchown(name string, uid, gid int) error
Chmod修改name指定的文件对象的用户id和组id。若是name指定的文件是一个符号连接,它会修改该符号连接自身的用户id和组id。若是出错,会返回*PathError底层类型的错误。
func Chtimes(name string, atime time.Time, mtime time.Time) error
Chtimes修改name指定的文件对象的访问时间和修改时间,相似Unix的utime()或utimes()函数。底层的文件系统可能会截断/舍入时间单位到更低的精确度。若是出错,会返回*PathError底层类型的错误。
func Mkdir(name string, perm FileMode) error
Mkdir使用指定的权限和名称建立一个目录。若是出错,会返回*PathError底层类型的错误。
func MkdirAll(path string, perm FileMode) error
MkdirAll使用指定的权限和名称建立一个目录,包括任何须要的上级目录,并返回nil,不然返回错误。权限位perm会应用在每个被本函数建立的目录上。若是path指定了一个已经存在的目录,MkdirAll不作任何操做并返回nil。
func Rename(oldpath, newpath string) error
Rename修改一个文件的名字,移动一个文件。可能会有一些个操做系统特定的限制。
func Truncate(name string, size int64) error
Truncate修改name指定的文件的大小。若是该文件为一个符号连接,将修改连接指向的文件的大小。若是出错,会返回*PathError底层类型的错误。
func Remove(name string) error
Remove删除name指定的文件或目录。若是出错,会返回*PathError底层类型的错误。
func RemoveAll(path string) error
RemoveAll删除path指定的文件,或目录及它包含的任何下级对象。它会尝试删除全部东西,除非遇到错误并返回。若是path指定的对象不存在,RemoveAll会返回nil而不返回错误。
func Readlink(name string) (string, error)
Readlink获取name指定的符号连接文件指向的文件的路径。若是出错,会返回*PathError底层类型的错误。
func Symlink(oldname, newname string) error
Symlink建立一个名为newname指向oldname的符号连接。若是出错,会返回* LinkError底层类型的错误。
func Link(oldname, newname string) error
Link建立一个名为newname指向oldname的硬连接。若是出错,会返回* LinkError底层类型的错误。
func SameFile(fi1, fi2 FileInfo) bool
SameFile返回fi1和fi2是否在描述同一个文件。例如,在Unix这表示两者底层结构的设备和索引节点是相同的;在其余系统中多是根据路径名肯定的。SameFile应只使用本包Stat函数返回的FileInfo类型值为参数,其余状况下,它会返回假。
====================Error=============================
func IsExist(err error) bool
返回一个布尔值说明该错误是否表示一个文件或目录已经存在。ErrExist和一些系统调用错误会使它返回真。
func IsNotExist(err error) bool
返回一个布尔值说明该错误是否表示一个文件或目录不存在。ErrNotExist和一些系统调用错误会使它返回真。
func IsPermission(err error) bool
返回一个布尔值说明该错误是否表示因权限不足要求被拒绝。ErrPermission和一些系统调用错误会使它返回真。
这三个函数基于error,就是要根据相关操做的error返回再判断是不是由于这三个缘由致使的错误。
=======================Interface============================
type FileInfo interface {
Name() string // 文件的名字(不含扩展名) Size() int64 // 普通文件返回值表示其大小;其余文件的返回值含义各系统不一样 Mode() FileMode // 文件的模式位 ModTime() time.Time // 文件的修改时间 IsDir() bool // 等价于Mode().IsDir() Sys() interface{} // 底层数据来源(能够返回nil) }
func Stat(name string) (fi FileInfo, err error)
Stat返回一个描述name指定的文件对象的FileInfo。若是指定的文件对象是一个符号连接,返回的FileInfo描述该符号连接指向的文件的信息,本函数会尝试跳转该连接。若是出错,返回的错误值为*PathError类型。
func Lstat(name string) (fi FileInfo, err error)
Lstat返回一个描述name指定的文件对象的FileInfo。若是指定的文件对象是一个符号连接,返回的FileInfo描述该符号连接的信息,本函数不会试图跳转该连接。若是出错,返回的错误值为*PathError类型。
FileInfo用来描述一个文件对象。
fi, err3 := os.Stat(file) if err3 != nil { fmt.Println(err) }else { fmt.Println(fi) fileinfo := fi fname := fileinfo.Name() size := fileinfo.Size() mode := fileinfo.Mode() modtime := fileinfo.ModTime() dir := fileinfo.IsDir() fmt.Println(fname , size, mode, modtime, dir) } 输出: &{test.txt {32 {3933573732 30617868} {3933573732 30617868} {1088149345 30617869} 0 130} 0 {0 0} E:/projects/GoProjects/gopl.io/exercise/lesson01/test.txt 0 0 0 false} test.txt 130 -rw-rw-rw- 2017-09-19 14:05:11.6361569 +0800 CST false
type FileMode uint32
FileMode表明文件的模式和权限位。这些字位在全部的操做系统都有相同的含义,所以文件的信息能够在不一样的操做系统之间安全的移植。不是全部的位都能用于全部的系统,惟一共有的是用于表示目录的ModeDir位。
const ( // 单字符是被String方法用于格式化的属性缩写。 ModeDir FileMode = 1 << (32 - 1 - iota) // d: 目录 ModeAppend // a: 只能写入,且只能写入到末尾 ModeExclusive // l: 用于执行 ModeTemporary // T: 临时文件(非备份文件) ModeSymlink // L: 符号连接(不是快捷方式文件) ModeDevice // D: 设备 ModeNamedPipe // p: 命名管道(FIFO) ModeSocket // S: Unix域socket ModeSetuid // u: 表示文件具备其建立者用户id权限 ModeSetgid // g: 表示文件具备其建立者组id的权限 ModeCharDevice // c: 字符设备,需已设置ModeDevice ModeSticky // t: 只有root/建立者能删除/移动文件 // 覆盖全部类型位(用于经过&获取类型位),对普通文件,全部这些位都不该被设置 ModeType = ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | ModeDevice ModePerm FileMode = 0777 // 覆盖全部Unix权限位(用于经过&获取类型位) )
这些被定义的位是FileMode最重要的位。另外9个不重要的位为标准Unix rwxrwxrwx权限(任何人均可读、写、运行)。这些(重要)位的值应被视为公共API的一部分,可能会用于线路协议或硬盘标识:它们不能被修改,但能够添加新的位。
func (m FileMode) IsDir() bool
IsDir报告m是不是一个目录。
func (m FileMode) IsRegular() bool
IsRegular报告m是不是一个普通文件。
func (m FileMode) Perm() FileMode
Perm方法返回m的Unix权限位。
func (m FileMode) String() string
fmt.Println(fileinfo.Mode().IsDir())
fmt.Println(fileinfo.Mode().IsRegular())
fmt.Println(fileinfo.Mode().Perm())
fmt.Println(fileinfo.Mode().String())
输出为: false
true
-rw-rw-rw-
-rw-rw-rw-
===================== STRUCT : File================================
type File struct {
// 内含隐藏或非导出字段
}
File表明一个打开的文件对象。
func Create(name string) (file *File, err error)
Create采用模式0666(任何人均可读写,不可执行)建立一个名为name的文件,若是文件已存在会截断它(为空文件)。若是成功,返回的文件对象可用于I/O;对应的文件描述符具备O_RDWR模式。若是出错,错误底层类型是*PathError。
func Open(name string) (file *File, err error)
Open打开一个文件用于读取。若是操做成功,返回的文件对象的方法可用于读取数据;对应的文件描述符具备O_RDONLY模式。若是出错,错误底层类型是*PathError。
func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
OpenFile是一个更通常性的文件打开函数,大多数调用者都应用Open或Create代替本函数。它会使用指定的选项(如O_RDONLY等)、指定的模式(如0666等)打开指定名称的文件。若是操做成功,返回的文件对象可用于I/O。若是出错,错误底层类型是*PathError。
func NewFile(fd uintptr, name string) *File
NewFile使用给出的Unix文件描述符和名称建立一个文件。
func (f *File) Fd() uintptr
Fd返回与文件f对应的整数类型的Unix文件描述符。
func Pipe() (r *File, w *File, err error)
Pipe返回一对关联的文件对象。从r的读取将返回写入w的数据。本函数会返回两个文件对象和可能的错误。
func (f *File) Read(b []byte) (n int, err error)
Read方法从f中读取最多len(b)字节数据并写入b。它返回读取的字节数和可能遇到的任何错误。文件终止标志是读取0个字节且返回值err为io.EOF。
func (f *File) ReadAt(b []byte, off int64) (n int, err error)
ReadAt从指定的位置(相对于文件开始位置)读取len(b)字节数据并写入b。它返回读取的字节数和可能遇到的任何错误。当n<len(b)时,本方法老是会返回错误;若是是由于到达文件结尾,返回值err会是io.EOF。
func (f *File) Write(b []byte) (n int, err error)
Write向文件中写入len(b)字节数据。它返回写入的字节数和可能遇到的任何错误。若是返回值n!=len(b)即返回写入的长度,本方法会返回一个非nil的错误。
func (f *File) WriteString(s string) (ret int, err error)
WriteString相似Write,但接受一个字符串参数。
func (f *File) WriteAt(b []byte, off int64) (n int, err error)
WriteAt在指定的位置(相对于文件开始位置)写入len(b)字节数据。它返回写入的字节数和可能遇到的任何错误。若是返回值n!=len(b),本方法会返回一个非nil的错误。
func (f *File) Name() string
Name方法返回(提供给Open/Create等方法的)文件名称。
func (f *File) Stat() (fi FileInfo, err error)
Stat返回描述文件f的FileInfo类型值。若是出错,错误底层类型是*PathError。
func (f *File) Fd() uintptr
Fd返回与文件f对应的整数类型的Unix文件描述符。
func (f *File) Chdir() error
Chdir将当前工做目录修改成f,f必须是一个目录。若是出错,错误底层类型是*PathError。
func (f *File) Chmod(mode FileMode) error
Chmod修改文件的模式。若是出错,错误底层类型是*PathError。
func (f *File) Chown(uid, gid int) error
Chown修改文件的用户ID和组ID。若是出错,错误底层类型是*PathError。
func (f *File) Readdir(n int) (fi []FileInfo, err error)
Readdir读取目录f的内容,返回一个有n个成员的[]FileInfo,这些FileInfo是被Lstat返回的,采用目录顺序。对本函数的下一次调用会返回上一次调用剩余未读取的内容的信息。
若是n>0,Readdir函数会返回一个最多n个成员的切片。这时,若是Readdir返回一个空切片,它会返回一个非nil的错误说明缘由。若是到达了目录f的结尾,返回值err会是io.EOF。
若是n<=0,Readdir函数返回目录中剩余全部文件对象的FileInfo构成的切片。此时,若是Readdir调用成功(读取全部内容直到结尾),它会返回该切片和nil的错误值。若是在到达结尾前遇到错误,会返回以前成功读取的FileInfo构成的切片和该错误。
package main import ( "os" "fmt" "log" ) func main(){ fd, err := os.Open(".") if err != nil{ log.Fatal(err) }else { dirs, err2 := fd.Readdir(-1) if err2 != nil{ log.Fatal(err2) }else { fmt.Println(dirs) for i:=0; i<len(dirs);i++{ fmt.Println(dirs[i].Name()) } } } }
输出结果为当前目录下全部文件和文件夹
func (f *File) Readdirnames(n int) (names []string, err error)
直接返回名字
Readdir读取目录f的内容,返回一个有n个成员的[]string,切片成员为目录中文件对象的名字,采用目录顺序。对本函数的下一次调用会返回上一次调用剩余未读取的内容的信息。
若是n>0,Readdir函数会返回一个最多n个成员的切片。这时,若是Readdir返回一个空切片,它会返回一个非nil的错误说明缘由。若是到达了目录f的结尾,返回值err会是io.EOF。
若是n<=0,Readdir函数返回目录中剩余全部文件对象的名字构成的切片。此时,若是Readdir调用成功(读取全部内容直到结尾),它会返回该切片和nil的错误值。若是在到达结尾前遇到错误,会返回以前成功读取的名字构成的切片和该错误。
func (f *File) Truncate(size int64) error
Truncate改变文件的大小,它不会改变I/O的当前位置。 若是截断文件,多出的部分就会被丢弃。若是出错,错误底层类型是*PathError。
func (f *File) Seek(offset int64, whence int) (ret int64, err error)
Seek设置下一次读/写的位置。offset为相对偏移量,而whence决定相对位置:0为相对文件开头,1为相对当前位置,2为相对文件结尾。它返回新的偏移量(相对开头)和可能的错误。
func (f *File) Sync() (err error)
Sync递交文件的当前内容进行稳定的存储。通常来讲,这表示将文件系统的最近写入的数据在内存中的拷贝刷新到硬盘中稳定保存。
func (f *File) Close() error
Close关闭文件f,使文件不能用于读写。它返回可能出现的错误。
===================== STRUCT : Process================================
type ProcAttr struct {
// 若是Dir非空,子进程会在建立进程前先进入该目录。(即设为当前工做目录)
Dir string // 若是Env非空,它会做为新进程的环境变量。必须采用Environ返回值的格式。 // 若是Env为空字符串,将使用Environ函数的返回值。 Env []string // Files指定被新进程继承的活动文件对象。 // 前三个绑定为标准输入、标准输出、标准错误输出。 // 依赖底层操做系统的实现可能会支持额外的数据出入途径。 // nil条目至关于在进程开始时关闭的文件对象。 Files []*File // 操做系统特定的建立属性。 // 注意设置本字段意味着你的程序可能会运做失常甚至在某些操做系统中没法经过编译。 Sys *syscall.SysProcAttr }
ProcAttr保管将被StartProcess函数用于一个新进程的属性。
type Process struct { Pid int // 内含隐藏或非导出字段 }
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中向进程发送Interrupt信号还没有实现。
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 struct {
// 内含隐藏或非导出字段
}
ProcessState保管Wait函数报告的某个已退出进程的信息。
func (p *ProcessState) Pid() int
Pi返回一个已退出的进程的进程id。
func (p *ProcessState) Exited() bool
Exited报告进程是否已退出。
func (p *ProcessState) Success() bool
Success报告进程是否成功退出,如在Unix里以状态码0退出。
func (p *ProcessState) SystemTime() time.Duration
SystemTime返回已退出进程及其子进程耗费的系统CPU时间。
func (p *ProcessState) UserTime() time.Duration
UserTime返回已退出进程及其子进程耗费的用户CPU时间。
func (p *ProcessState) Sys() interface{}
Sys返回该已退出进程系统特定的退出信息。须要将其类型转换为适当的底层类型,如Unix里转换为*syscall.WaitStatus类型以获取其内容。
func (p *ProcessState) SysUsage() interface{}
SysUsage返回该已退出进程系统特定的资源使用信息。须要将其类型转换为适当的底层类型,如Unix里转换为*syscall.Rusage类型以获取其内容。
func (p *ProcessState) String() string