os
29 分钟阅读
os
https://pkg.go.dev/os@go1.20.1
os包提供了一个独立于平台的操作系统功能接口。设计类 Unix,但错误处理类 Go;失败的调用会返回类型为 error 而不是错误号的值。通常,在错误中还有更多的信息。例如,如果一个以文件名为参数的调用失败了,比如 Open 或 Stat,错误消息将在打印时包括失败的文件名,并且类型为 *PathError
,可以拆开以获取更多信息。
os 接口旨在在所有操作系统中保持统一。一般不可用的功能会出现在特定于系统的 syscall 包中。
这里是一个简单的例子,打开一个文件并读取其中一部分。
file, err := os.Open("file.go") // 用于读取。
if err != nil {
log.Fatal(err)
}
如果打开失败,错误字符串将是不言自明的,例如
open file.go: no such file or directory
然后可以将文件的数据读入到一个字节片中。Read 和 Write 的字节计数从参数切片的长度中获取。
data := make([]byte, 100)
count, err := file.Read(data)
if err != nil {
log.Fatal(err)
}
fmt.Printf("read %d bytes: %q\n", count, data[:count])
注意:File 上的最大并发操作数可能受到操作系统或系统的限制。该数字应该很高,但超出它可能会降低性能或引起其他问题。
常量
|
|
OpenFile 的标志,包装了底层系统的标志。并非所有的标志都可能在给定系统上实现。
|
|
寻址偏移值。
已弃用:请使用 io.SeekStart、io.SeekCurrent 和 io.SeekEnd。
|
|
|
|
已定义的文件模式比特是 FileMode 的最高有效位。最低有效位是标准 Unix rwxrwxrwx 权限位。这些位的值应该被视为公共 API 的一部分,可以在传输协议或磁盘表示中使用:不能更改它们,尽管可以添加新的位。
|
|
DevNull 是操作系统的"null 设备"的名称。在类 Unix 系统上,它是"/dev/null";在 Windows 上,它是"NUL"。
变量
|
|
一些常见系统调用错误的便携式类比。
此包返回的错误可以使用 errors.Is 进行测试。
|
|
Stdin、Stdout 和 Stderr 是打开的文件,它们指向标准输入、标准输出和标准错误文件描述符。
请注意,Go 运行时会将 panics 和 crashes 的消息写入标准错误;关闭 Stderr 可能会导致这些消息转到其他位置,例如稍后打开的文件。
|
|
Args 保存命令行参数,从程序名开始。
|
|
ErrProcessDone 表示进程已经结束。
函数
func Chdir
|
|
Chdir函数将当前工作目录更改为指定的目录。如果出错,将返回 *PathError
类型的错误。
func Chmod
|
|
Chmod函数将指定文件的模式更改为 mode。如果该文件是符号链接,则更改链接目标的模式。如果出错,将返回 *PathError
类型的错误。
根据操作系统使用不同的模式比特的子集。
在 Unix 上,使用 mode 的权限位 ModeSetuid、ModeSetgid 和 ModeSticky。
在 Windows 上,仅使用 mode 的 0200 位(所有者可写);它控制文件的只读属性是设置还是清除。其他位当前未使用。为了与 Go 1.12 及更早版本兼容,请使用非零模式。对于只读文件,请使用 mode 0400,对于可读写文件,请使用 mode 0600。
在 Plan 9 上,使用 mode 的权限位 ModeAppend、ModeExclusive 和 ModeTemporary。
|
|
func Chown
|
|
Chown函数更改指定文件的数值 UID 和 GID。如果该文件是符号链接,则更改链接目标的 UID 和 GID。UID 或 GID 的值为 -1 表示不更改该值。如果出错,将返回 *PathError 类型的错误。
在 Windows 或 Plan 9 上,Chown 始终返回 syscall.EWINDOWS 或 EPLAN9 错误,包装在 *PathError 中。
func Chtimes
|
|
Chtimes函数更改指定文件的访问和修改时间,类似于 Unix 的 utime() 或 utimes() 函数。
底层文件系统可能会将值截断或舍入为较不精确的时间单位。如果出错,将返回 *PathError
类型的错误。
|
|
func Clearenv
|
|
Clearenv函数删除所有环境变量。
func DirFS <- go1.16
|
|
DirFS函数返回以目录 dir 为根的文件树的文件系统(即 fs.FS)。
请注意,DirFS("/prefix") 只保证它对操作系统所做的 Open 调用将以 “/prefix” 开始:DirFS("/prefix").Open(“file”) 与 os.Open("/prefix/file") 相同。因此,如果 /prefix/file
是指向 /prefix
以外的符号链接,则使用 DirFS 不会比使用 os.Open 更停止访问。此外,对于相对路径,DirFS 返回的 fs.FS 的根目录,即 DirFS(“prefix”),将受后续 Chdir 调用的影响。因此,当目录树包含任意内容时,DirFS 不是 chroot 类型的安全机制的通用替代品。
目录 dir 不得为 “"。
该结果实现 fs.StatFS。
func Environ
|
|
Environ函数返回表示环境变量的字符串副本,格式为"key=value”。
func Executable <- go1.8
|
|
Executable函数返回启动当前进程的可执行文件的路径名。不能保证路径仍指向正确的可执行文件。如果使用符号链接启动了进程,则根据操作系统,结果可能是符号链接或它所指向的路径。如果需要稳定的结果,path/filepath.EvalSymlinks
可能有所帮助。
Executable返回绝对路径,除非发生错误。
主要用例是查找相对于可执行文件的资源。
func Exit
|
|
Exit函数使当前程序以给定的状态码退出。传统上,代码零表示成功,非零表示错误。程序立即终止;延迟函数不会运行。
为了可移植性,状态码应在[0,125]范围内。
func Expand
|
|
Expand函数根据映射函数替换字符串中的${var}
或$var
。例如,os.ExpandEnv(s)相当于os.Expand(s,os.Getenv)。
|
|
func ExpandEnv
|
|
ExpandEnv函数根据当前环境变量的值替换字符串中的${var}
或$var
。对未定义的变量的引用将替换为空字符串。
|
|
func Getegid
|
|
Getegid函数返回调用方的有效组ID。
在Windows上,它返回-1。
func Getenv
|
|
Getenv函数检索由键指定的环境变量的值。它返回值,如果变量不存在,则为空。要区分空值和未设置的值,请使用LookupEnv。
|
|
func Geteuid
|
|
Geteuid函数返回调用方的数字有效用户 ID。
在Windows上,它返回-1。
func Getgid
|
|
Getgid函数返回调用方的数字组 ID。
在Windows上,它返回-1。
func Getgroups
|
|
Getgroups函数返回调用方所属的组的数字 ID 列表。
在Windows上,它返回syscall.EWINDOWS。有关可能的替代方案,请参见os/user包。
func Getpagesize
|
|
Getpagesize函数返回底层系统的内存页面大小。
func Getpid
|
|
Getpid函数返回调用方的进程 ID。
func Getppid
|
|
Getppid函数返回调用方的父进程 ID。
func Getuid
|
|
Getuid函数返回调用方的数字用户 ID。
在Windows上,它返回-1。
func Getwd
|
|
Getwd函数返回对应于当前目录的根路径名。如果可以通过多个路径到达当前目录(由于符号链接),Getwd可能返回其中任何一个。
func Hostname
|
|
Hostname函数返回内核报告的主机名。
func IsExist
|
|
IsExist函数返回一个布尔值,指示错误是否已知报告文件或目录已经存在。它满足ErrExist以及一些syscall错误。
此函数先于errors.Is。它仅支持由os包返回的错误。新代码应使用errors.Is(err,fs.ErrExist)。
func IsNotExist
|
|
IsNotExist函数返回一个布尔值,指示错误是否已知报告文件或目录不存在。它满足ErrNotExist以及一些syscall错误。
此函数先于errors.Is。它仅支持由os包返回的错误。新代码应使用errors.Is(err,fs.ErrNotExist)。
func IsPathSeparator
|
|
IsPathSeparator函数返回一个布尔值,指示c是否为目录分隔符字符。
func IsPermission
|
|
IsPermission函数返回一个布尔值,指示错误是否已知报告权限被拒绝。它与某些系统调用错误以及ErrPermission相符。
此函数早于errors.Is。它仅支持由os包返回的错误。新代码应使用errors.Is(err,fs.ErrPermission)。
func IsTimeout <- go1.10
|
|
IsTimeout函数返回一个布尔值,指示错误是否已知报告超时发生。
此函数早于errors.Is,并且错误是否表示超时的概念可能不明确。例如,Unix错误EWOULDBLOCK有时指示超时,有时不是。新代码应使用与返回错误的调用相适应的值,例如os.ErrDeadlineExceeded。
func Lchown
|
|
Lchown函数更改命名文件的数值UID和GID。如果文件是符号链接,则更改链接本身的UID和GID。如果有错误,它将是*PathError类型。
在Windows上,它总是返回syscall.EWINDOWS错误,包装在*PathError中。
func Link
|
|
Link函数将newname创建为oldname文件的硬链接。如果有错误,它将是*LinkError
类型。
func LookupEnv <- go1.5
|
|
LookupEnv函数检索由key指定的环境变量的值。如果变量存在于环境中,则返回值(可能为空)为true。否则,返回的值将为空,布尔值将为false。
|
|
func Mkdir
|
|
Mkdir函数使用指定的名称和权限位(umask之前)创建一个新目录。如果有错误,它将是*PathError
类型。
|
|
func MkdirAll
|
|
MkdirAll函数创建一个名为path的目录,并创建所有必要的父级目录,返回nil,否则返回错误。所有由MkdirAll创建的目录都将使用perm(在umask之前)设置的权限位。如果path已经是一个目录,则MkdirAll不执行任何操作并返回nil。
|
|
func MkdirTemp <- go1.16
|
|
MkdirTemp函数在目录dir中创建一个新的临时目录,并返回新目录的路径名。新目录的名称通过在模式的末尾添加一个随机字符串来生成。如果模式包含一个" *
",则随机字符串替换最后一个"*
"。如果dir为空字符串,则MkdirTemp使用临时文件的默认目录,由TempDir返回。同时调用MkdirTemp的多个程序或goroutine不会选择相同的目录。当不再需要目录时,由调用者负责删除该目录。
MkdirTemp Example
|
|
MkdirTemp Example(Suffix)
|
|
func NewSyscallError
|
|
NewSyscallError函数返回一个新的SyscallError,其中包含给定的系统调用名称和错误详细信息作为错误。为方便起见,如果err为nil,则NewSyscallError返回nil。
func Pipe
|
|
Pipe函数返回一对连接的文件。从r读取的字节返回到w中。如果有错误,则返回文件和错误。
func ReadFile <- go1.16
|
|
ReadFile函数读取指定的文件并返回文件内容。成功调用返回err == nil,而不是err == EOF。由于ReadFile读取整个文件,因此它不将从Read返回的EOF视为要报告的错误。
ReadFile Example
|
|
func Readlink
|
|
Readlink函数返回指定符号链接的目标。如果有错误,则错误类型为* PathError。
func Remove
|
|
Remove函数删除指定的文件或(空)目录。如果有错误,则错误类型为* PathError
。
func RemoveAll
|
|
RemoveAll函数删除路径及其包含的所有子项。它会尽可能删除所有内容,但返回遇到的第一个错误。如果路径不存在,则RemoveAll返回nil(无错误)。如果有错误,则错误类型为* PathError
。
func Rename
|
|
Rename函数将oldpath重命名(移动)为newpath。如果newpath已经存在且不是目录,则会替换它。当oldpath和newpath在不同目录中时,可能会受到操作系统特定的限制。即使在同一个目录中,对于非Unix平台,Rename操作也不是原子性的。如果出错,错误类型为*LinkError
。
func SameFile
|
|
SameFile函数报告fi1和fi2描述的是否是同一文件。例如,在Unix上,这意味着两个底层结构的设备和inode字段是相同的;在其他系统上,决策可能基于路径名。SameFile仅适用于此包的Stat返回的结果。在其他情况下返回false。
func Setenv
|
|
Setenv函数设置由键名key命名的环境变量的值。如果有任何错误,它将返回该错误。
func Symlink
|
|
Symlink函数将newname创建为指向oldname的符号链接。在Windows上,指向不存在的oldname的符号链接会创建一个文件符号链接;如果后来将oldname创建为目录,则符号链接将无法正常工作。如果出错,错误类型为*LinkError
。
func TempDir
|
|
TempDir函数返回用于临时文件的默认目录。
在Unix系统上,如果$TMPDIR不为空,则返回它,否则返回/tmp。在Windows上,它使用GetTempPath,从%TMP%,%TEMP%,%USERPROFILE%或Windows目录中返回第一个非空值。在Plan 9上,它返回/tmp。
该目录既不保证存在,也不保证可访问权限。
func Truncate
|
|
Truncate函数更改命名文件的大小。如果文件是符号链接,则更改链接目标的大小。如果出错,错误类型为*PathError
。
func Unsetenv <- go1.4
|
|
Unsetenv函数取消设置单个环境变量。
Unsetenv Example
|
|
func UserCacheDir <- go1.11
|
|
UserCacheDir函数返回用于用户特定缓存数据的默认根目录。用户应在其中创建自己的应用程序特定子目录并使用该目录。
在Unix系统上,如果$XDG_CACHE_HOME
不为空,则根据https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html指定的内容返回该值,否则返回$HOME/.cache
。在Darwin上,它返回$HOME/Library/Caches
。在Windows上,它返回%LocalAppData%
。在Plan 9上,它返回$home/lib/cache
。
如果无法确定位置(例如,$HOME未定义),则它将返回一个错误。
func UserConfigDir <- go1.13
|
|
UserConfigDir函数返回用于用户特定配置数据的默认根目录。用户应在其中创建自己的应用程序特定子目录并使用该子目录。
在 Unix 系统上,如果非空,则返回 $XDG_CONFIG_HOME
,否则返回 $HOME/.config
。在 Darwin 上,它返回 $HOME/Library/Application Support
。在 Windows 上,它返回 %AppData%
。在 Plan 9 上,它返回 $home/lib
。
如果无法确定位置(例如未定义 $HOME
),则返回错误。
func UserHomeDir <- go1.12
|
|
UserHomeDir函数返回当前用户的主目录。
在 Unix 系统(包括 macOS)上,它返回 $HOME
环境变量。在 Windows 上,它返回%USERPROFILE%
。在 Plan 9 上,它返回 $home
环境变量。
func WriteFile <- go1.16
|
|
`WriteFile函数将数据写入命名文件,如有必要创建它。如果文件不存在,则 WriteFile 使用权限 perm(在 umask 前)创建它;否则 WriteFile 在写入前将其截断,而不更改权限。由于 Writefile 需要多个系统调用才能完成,因此操作中的失败可能会使文件处于部分写入状态。
WriteFile Example
|
|
类型
type DirEntry <- go1.16
|
|
DirEntry 是从目录中读取的条目(使用 ReadDir 函数或 File 的 ReadDir 方法)。
func ReadDir <- go1.16
|
|
ReadDir函数读取命名目录,返回其所有目录条目,按文件名排序。如果读取目录时出现错误,ReadDir 返回在错误之前能够读取的条目以及错误。
ReadDir Example
|
|
type File
|
|
File结构体表示一个打开的文件描述符。
func Create
|
|
Create函数创建或截断命名文件。如果文件已经存在,则将其截断。如果文件不存在,则创建它以使用 mode 0666(在 umask 前)。如果成功,则返回的 File 上的方法可用于 I/O;相关的文件描述符具有 mode O_RDWR。如果有错误,它将是 *PathError
类型。
func CreateTemp <- go1.16
|
|
CreateTemp函数在目录 dir 中创建一个新的临时文件,并打开它用于读写操作,并返回该文件。文件名由 pattern 生成,并在末尾添加一个随机字符串。如果 pattern 包含一个 “*
”, 随机字符串将替换最后一个 “*
"。如果 dir 是空字符串,则 CreateTemp 使用返回的 TempDir 作为临时文件的默认目录。同时调用 CreateTemp 的多个程序或 goroutine 不会选择同一个文件。调用者可以使用文件的 Name 方法查找文件的路径名。当不再需要文件时,由调用者负责删除它。
CreateTemp Example
|
|
CreateTemp Example (Suffix)
|
|
func NewFile
|
|
NewFile函数返回具有给定文件描述符和名称的新文件。如果 fd 不是有效的文件描述符,则返回值将为 nil。在 Unix 系统上,如果文件描述符处于非阻塞模式,则 NewFile 将尝试返回可轮询的文件(其 SetDeadline 方法有效)。
将其传递给 NewFile 后,fd 可能会在与 Fd 方法的注释相同的条件下无效,同样的限制也适用。
func Open
|
|
Open函数打开具有指定名称的文件以供读取。如果成功,可以使用返回的文件上的方法进行读取。关联的文件描述符具有 O_RDONLY 模式。如果出现错误,类型为 *PathError
。
func OpenFile
|
|
OpenFile函数是通用的打开调用,大多数用户将使用 Open 或 Create 来代替。使用指定标志(O_RDONLY 等)打开指定名称的文件。如果该文件不存在并且传递了 O_CREATE 标志,则使用模式 perm(位于 umask 之前)创建它。如果成功,则可以使用返回的文件上的方法进行 I/O。如果出现错误,类型为 *PathError
。
OpenFile Example
|
|
OpenFile Example(Append)
|
|
(*File) Chdir
|
|
Chdir方法将当前工作目录更改为文件。它必须是目录。如果出现错误,类型为 *PathError
。
(*File) Chmod
|
|
Chmod方法将文件的模式更改为 mode。如果出现错误,类型为 *PathError
。
(*File) Chown
|
|
Chown方法更改具有指定名称的文件的数字 uid 和 gid。如果出现错误,类型为 *PathError
。
在 Windows 上,它始终返回 syscall.EWINDOWS 错误,包装在 *PathError
中。
(*File) Close
|
|
Close方法关闭文件,使其不能用于I/O。对于支持SetDeadline的文件,任何待处理的I/O操作都将被取消,并立即返回ErrClosed错误。如果已经调用过Close方法,则Close将返回一个错误。
(*File) Fd
|
|
Fd方法返回整数Unix文件描述符,引用打开的文件。如果f已关闭,则文件描述符将变为无效。如果f被垃圾回收,终结器可能会关闭文件描述符,使其无效;有关何时运行终结器的更多信息,请参见runtime.SetFinalizer。在Unix系统中,这将导致SetDeadline方法停止工作。因为文件描述符可以被重用,所以返回的文件描述符只能通过f的Close方法或在垃圾回收期间的终结器关闭。否则,在垃圾回收期间,终结器可能会关闭具有相同(重用)编号的不相关文件描述符。
作为替代方案,请参见f.SyscallConn方法。
(*File) Name
|
|
Name方法返回打开文件的名称。
(*File) Read
|
|
Read方法从文件中读取最多len(b)字节,并将其存储在b中。它返回读取的字节数和任何遇到的错误。在文件末尾,Read返回0,io.EOF。
(*File) ReadAt
|
|
ReadAt方法从文件中读取len(b)字节,从偏移量off处开始。它返回读取的字节数和错误(如果有)。当n < len(b)时,ReadAt总是返回非nil错误。在文件末尾,该错误为io.EOF。
(*File) ReadDir <- go1.16
|
|
ReadDir方法读取与文件f相关联的目录的内容,并按文件名返回一系列DirEntry值。对同一文件的后续调用将按目录顺序返回后续的DirEntry记录。
如果n > 0,则ReadDir最多返回n个DirEntry记录。在这种情况下,如果ReadDir返回一个空切片,则它将返回一个解释原因的错误。在目录末尾,错误为io.EOF。
如果n <= 0,则ReadDir将返回剩余目录中的所有DirEntry记录。当它成功时,它返回一个nil错误(而不是io.EOF)。
(*File) ReadFrom <- go1.15
|
|
ReadFrom方法实现了io.ReaderFrom。
(*File) Readdir
|
|
Readdir方法读取与文件 f 关联的目录并以目录顺序返回最多 n 个 FileInfo 值的切片,与 Lstat 返回的一样。在同一文件上的后续调用将返回更多的 FileInfos。
如果 n > 0,则 Readdir 返回最多 n 个 FileInfo 结构。在这种情况下,如果 Readdir 返回一个空切片,则它将返回一个非 nil 的错误来解释原因。在目录末尾,错误为 io.EOF。
如果 n <= 0,则 Readdir 以单个切片返回目录中的所有 FileInfo。在这种情况下,如果 Readdir 成功(一直读到目录结尾),它将返回切片和 nil 错误。如果在目录结尾之前遇到错误,则 Readdir 返回读取到该点的 FileInfo 和非 nil 错误。
大多数客户端最好使用更高效的 ReadDir 方法。
(*File) Readdirnames
|
|
Readdirnames方法读取与文件 f 关联的目录并按目录顺序返回最多 n 个文件名的切片。在同一文件上的后续调用将返回更多的文件名。
如果 n > 0,则 Readdirnames 返回最多 n 个文件名。在这种情况下,如果 Readdirnames 返回一个空切片,则它将返回一个非 nil 的错误来解释原因。在目录末尾,错误为 io.EOF。
如果 n <= 0,则 Readdirnames 以单个切片返回目录中的所有名称。在这种情况下,如果 Readdirnames 成功(一直读到目录结尾),它将返回切片和 nil 错误。如果在目录结尾之前遇到错误,则 Readdirnames 返回读取到该点的名称和非 nil 错误。
(*File) Seek
|
|
Seek方法将下一个文件上的读取或写入的偏移量设置为 offset,根据 whence 进行解释:0 表示相对于文件起始处,1 表示相对于当前偏移量,2 表示相对于结尾。它返回新的偏移量和错误(如果有)。对于使用 O_APPEND 打开的文件,Seek 的行为未指定。
(*File) SetDeadline <- go1.10
|
|
SetDeadline方法为文件设置读取和写入的截止日期。它等价于同时调用 SetReadDeadline 和 SetWriteDeadline。
只有某些类型的文件支持设置截止日期。调用不支持截止日期的文件的 SetDeadline方法将返回 ErrNoDeadline。在大多数系统上,普通文件不支持截止日期,但管道支持。
一个截止时间是一个绝对时间,在此之后,I/O 操作会失败并返回一个错误,而不是阻塞。截止时间适用于所有未来和待处理的 I/O,而不仅仅是对 Read 或 Write 的立即调用。超过截止时间后,可以通过设置将来的截止时间来刷新连接。
如果超过截止时间,对 Read 或 Write 或其他 I/O 方法的调用将返回一个包装 ErrDeadlineExceeded 的错误。可以使用 errors.Is(err,os.ErrDeadlineExceeded) 进行测试。该错误实现了 Timeout 方法,调用 Timeout 方法将返回 true,但有其他可能的错误,即使超时时间尚未超过,Timeout 也会返回 true。
可以通过在成功的 Read 或 Write 调用后反复延长截止时间来实现空闲超时。
t 的零值表示 I/O 操作不会超时。
(*File) SetReadDeadline <- go1.10
|
|
SetReadDeadline方法设置将来的 Read 调用和任何当前阻塞的 Read 调用的截止时间。t 的零值表示 Read 不会超时。不是所有文件都支持设置截止时间;请参见 SetDeadline。
(*File) SetWriteDeadline <- go1.10
|
|
SetWriteDeadline方法设置任何将来的 Write 调用和任何当前阻塞的 Write 调用的截止时间。即使 Write 超时,它也可能返回 n > 0,表示某些数据已成功写入。t 的零值表示 Write 不会超时。不是所有文件都支持设置截止时间;请参见 SetDeadline。
(*File) Stat
|
|
Stat方法返回描述文件的 FileInfo 结构。如果有错误,它将是 *PathError
类型。
(*File) Sync
|
|
Sync方法将文件的当前内容提交到稳定存储。通常,这意味着将文件系统的最近写入数据的内存副本刷新到磁盘。
(*File) SyscallConn <- go1.12
|
|
SyscallConn方法返回一个原始文件。它实现了 syscall.Conn 接口。
(*File) Truncate
|
|
Truncate方法改变文件的大小。它不会改变 I/O 偏移量。如果有错误,它将是 *PathError
类型。
(*File) Write
|
|
Write方法将 len(b) 个字节从 b 写入 File 中。它返回写入的字节数和错误(如果有)。当 n != len(b) 时,Write 返回非 nil 错误。
(*File) WriteAt
|
|
WriteAt方法从字节偏移量 off 处开始,将 len(b) 个字节写入 File。它返回写入的字节数和错误(如果有)。当 n != len(b) 时,WriteAt 返回非 nil 错误。
如果打开 file 时使用了 O_APPEND 标志,则 WriteAt 返回一个错误。
(*File) WriteString
|
|
WriteString方法类似于 Write,但它写入字符串 s 的内容而不是字节切片。
type FileInfo
|
|
FileInfo 描述一个文件,并由 Stat 和 Lstat 返回。
func Lstat
|
|
Lstat函数返回描述命名文件的 FileInfo。如果文件是符号链接,则返回的 FileInfo 描述符号链接。Lstat 不会尝试跟随链接。如果有错误,它将是 *PathError
类型的。
func Stat
|
|
Stat函数返回描述命名文件的 FileInfo。如果有错误,它将是 *PathError
类型的。
type FileMode
|
|
FileMode表示文件的模式和权限位。这些位在所有系统上具有相同的定义,因此可以将关于文件的信息可移植地从一个系统移动到另一个系统。并非所有位都适用于所有系统。ModeDir 用于目录是唯一需要的位。
FileMode Example
|
|
type LinkError
|
|
LinkError结构体记录了link、symlink或rename系统调用期间发生的错误和引起错误的路径。
(*LinkError) Error
|
|
(*LinkError) Unwrap <- go1.13
|
|
type PathError
|
|
PathError类型记录了错误和引起错误的操作和文件路径。
type ProcAttr
|
|
ProcAttr结构体保存将应用于由StartProcess启动的新进程的属性。
type Process
|
|
Process结构体存储由StartProcess创建的进程的信息。
func FindProcess
|
|
FindProcess函数按其pid查找正在运行的进程。
它返回的Process可用于获取有关底层操作系统进程的信息。
在Unix系统上,FindProcess始终成功并返回给定pid的Process,无论进程是否存在。
func StartProcess
|
|
StartProcess函数使用由name、argv和attr指定的程序、参数和属性启动一个新的进程。argv切片将成为新进程的os.Args,因此它通常以程序名称开头。
如果调用的goroutine已使用runtime.LockOSThread锁定操作系统线程并修改了任何可继承的操作系统级线程状态(例如Linux或Plan 9名称空间),新进程将继承调用者的线程状态。
StartProcess是一个低级接口。os/exec包提供了更高级的接口。
如果有错误,则为*PathError
类型。
(*Process) Kill
|
|
Kill方法使进程立即退出。Kill不会等待进程实际退出。这只会杀死进程本身,而不是它可能启动的任何其他进程。
(*Process) Release
|
|
Release方法释放与进程p关联的任何资源,使其在将来无法使用。如果不使用Wait,则只需要调用Release。
(*Process) Signal
|
|
Signal方法向进程发送信号。在Windows上发送中断信号未实现。
(*Process) Wait
|
|
Wait方法等待进程退出,然后返回ProcessState描述其状态和任何错误。Wait释放与进程关联的任何资源。在大多数操作系统上,进程必须是当前进程的子进程,否则将返回一个错误。
type ProcessState
|
|
ProcessState结构体存储关于进程的信息,由Wait方法报告。
(*ProcessState) ExitCode <- go1.12
|
|
ExitCode方法返回退出的进程的退出代码,如果进程尚未退出或被信号终止,则返回-1。
(*ProcessState) Exited
|
|
Exited方法报告程序是否已退出。在Unix系统上,如果程序由于调用exit而退出,则此项报告为true,但如果程序由于信号终止而终止,则此项报告为false。
(*ProcessState) Pid
|
|
Pid方法返回已退出进程的进程ID。
(*ProcessState) String
|
|
(*ProcessState) Success
|
|
Success方法报告程序是否成功退出,例如在Unix上以退出状态0退出。
(*ProcessState) Sys
|
|
Sys方法返回有关进程的系统相关退出信息。将其转换为适当的底层类型,例如在Unix上的syscall.WaitStatus,以访问其内容。
(*ProcessState) SysUsage
|
|
SysUsage方法返回有关已退出进程的系统相关资源使用情况信息。将其转换为适当的底层类型,例如在Unix上的*syscall.Rusage
,以访问其内容。(在Unix上,*syscall.Rusage
与getrusage(2)手册页中定义的struct rusage匹配。)
(*ProcessState) SystemTime
|
|
SystemTime方法返回已退出进程及其子进程的系统CPU时间。
(*ProcessState) UserTime
|
|
UserTime方法返回已退出进程及其子进程的用户CPU时间。
type Signal
|
|
Signal接口表示操作系统信号。通常底层实现是操作系统相关的:在Unix上,它是syscall.Signal。
|
|
在所有系统上os包中保证存在的唯一信号值是os.Interrupt(发送中断信号给进程)和os.Kill(强制进程退出)。在Windows上,使用os.Process.Signal将os.Interrupt发送到进程不起作用;它会返回一个错误,而不是发送信号。
type SyscallError
|
|
SyscallError结构体记录特定系统调用的错误。
(*SyscallError) Error
|
|
(*SyscallError) Timeout <- go1.10
|
|
Timeout方法报告此错误是否表示超时。
(*SyscallError) Unwrap <- go1.13
|
|