Go语言从入门到规范-6.2、Go语言os包
文章目录
- 1.概述
- 2.常量
- 3.变量
- 4.func [Chdir](https://go-zh.org/src/os/file.go?s=6322:6350#L210)
- 5.func [Chmod](https://go-zh.org/src/os/file_posix.go?s=1434:1478#L48)
- 6.func [Chown](https://go-zh.org/src/os/file_posix.go?s=2101:2144#L70)
- 7.func [Chtimes](https://go-zh.org/src/os/file_posix.go?s=3867:3932#L131)
- 8.func [Clearenv](https://go-zh.org/src/os/env.go?s=2854:2869#L90)
- 9.func [Environ](https://go-zh.org/src/os/env.go?s=2990:3013#L96)
- 10.func [Exit](https://go-zh.org/src/os/proc.go?s=1328:1347#L39)
- 11.func [Expand](https://go-zh.org/src/os/env.go?s=379:436#L3)
- 12.func [ExpandEnv](https://go-zh.org/src/os/env.go?s=963:994#L22)
- 13.func [Getegid](https://go-zh.org/src/os/proc.go?s=867:885#L27)
- 14.func [Getenv](https://go-zh.org/src/os/env.go?s=2363:2393#L69)
- 15.func [Geteuid](https://go-zh.org/src/os/proc.go?s=652:670#L21)
- 16.func [Getgid](https://go-zh.org/src/os/proc.go?s=755:772#L24)
- 17.func [Getgroups](https://go-zh.org/src/os/proc.go?s=1001:1032#L30)
- 18.func [Getpagesize](https://go-zh.org/src/os/types.go?s=268:290#L3)
- 19.func [Getpid](https://go-zh.org/src/os/exec.go?s=2009:2026#L57)
- 20.func [Getppid](https://go-zh.org/src/os/exec.go?s=2114:2132#L60)
- 21.func [Getuid](https://go-zh.org/src/os/proc.go?s=541:558#L18)
- 22.func [Getwd](https://go-zh.org/src/os/getwd.go?s=621:657#L16)
- 23.func [Hostname](https://go-zh.org/src/os/doc.go?s=2934:2974#L82)
- 24.func [IsExist](https://go-zh.org/src/os/error.go?s=1387:1415#L39)
- 25.func [IsNotExist](https://go-zh.org/src/os/error.go?s=1632:1663#L46)
- 26.func [IsPathSeparator](https://go-zh.org/src/os/path_unix.go?s=441:475#L5)
- 27.func [IsPermission](https://go-zh.org/src/os/error.go?s=1873:1906#L53)
- 28.func [Lchown](https://go-zh.org/src/os/file_posix.go?s=2453:2497#L80)
- 29.func [Link](https://go-zh.org/src/os/file_unix.go?s=9281:9321#L325)
- 30.func [Mkdir](https://go-zh.org/src/os/file.go?s=5864:5908#L194)
- 31.func [MkdirAll](https://go-zh.org/src/os/path.go?s=488:535#L9)
- 32.func [NewSyscallError](https://go-zh.org/src/os/error.go?s=1075:1128#L29)
- 33.func [Readlink](https://go-zh.org/src/os/file_posix.go?s=451:493#L8)
- 34.func [Remove](https://go-zh.org/src/os/file_unix.go?s=7726:7756#L263)
- 35.func [RemoveAll](https://go-zh.org/src/os/path.go?s=1635:1668#L56)
- 36.func [Rename](https://go-zh.org/src/os/file.go?s=7581:7623#L251)
- 37.func [SameFile](https://go-zh.org/src/os/types.go?s=3880:3917#L101)
- 38.func [Setenv](https://go-zh.org/src/os/env.go?s=2541:2577#L76)
- 39.func [Symlink](https://go-zh.org/src/os/file_unix.go?s=9557:9600#L335)
- 40.func [TempDir](https://go-zh.org/src/os/file_unix.go?s=8991:9012#L311)
- 41.func [Truncate](https://go-zh.org/src/os/file_unix.go?s=7467:7511#L254)
- 42.func [Unsetenv](https://go-zh.org/src/os/env.go?s=2740:2771#L85)
- 43.type [File](https://go-zh.org/src/os/file_unix.go?s=335:362#L6)
- (1).func [Create](https://go-zh.org/src/os/file.go?s=7349:7397#L243)
- (2).func [NewFile](https://go-zh.org/src/os/file_unix.go?s=1063:1106#L31)
- (3).func [Open](https://go-zh.org/src/os/file.go?s=6987:7033#L234)
- (4).func [OpenFile](https://go-zh.org/src/os/file_unix.go?s=2142:2217#L67)
- (5).func [Pipe](https://go-zh.org/src/os/pipe_linux.go?s=319:360#L1)
- (6).func (*File) [Chdir](https://go-zh.org/src/os/file.go?s=6594:6622#L220)
- (7).func (*File) [Chmod](https://go-zh.org/src/os/file_posix.go?s=1700:1741#L57)
- (8).func (*File) [Chown](https://go-zh.org/src/os/file_posix.go?s=2725:2765#L89)
- (9).func (*File) [Close](https://go-zh.org/src/os/file_unix.go?s=2933:2961#L96)
- (10).func (*File) [Fd](https://go-zh.org/src/os/file_unix.go?s=896:923#L23)
- (11).func (*File) [Name](https://go-zh.org/src/os/file.go?s=1531:1559#L35)
- (12).func (*File) [Read](https://go-zh.org/src/os/file.go?s=3214:3262#L81)
- (13).func (*File) [ReadAt](https://go-zh.org/src/os/file.go?s=3716:3777#L102)
- (14).func (*File) [Readdir](https://go-zh.org/src/os/doc.go?s=3807:3863#L101)
- (15).func (*File) [Readdirnames](https://go-zh.org/src/os/doc.go?s=4579:4641#L120)
- (16).func (*File) [Seek](https://go-zh.org/src/os/file.go?s=5209:5277#L169)
- (17).func (*File) [Stat](https://go-zh.org/src/os/file_unix.go?s=3468:3514#L120)
- (18).func (*File) [Sync](https://go-zh.org/src/os/file_posix.go?s=3418:3451#L115)
- (19).func (*File) [Truncate](https://go-zh.org/src/os/file_posix.go?s=3052:3093#L102)
- (20).func (*File) [Write](https://go-zh.org/src/os/file.go?s=4193:4242#L125)
- (21).func (*File) [WriteAt](https://go-zh.org/src/os/file.go?s=4659:4721#L148)
- (22).func (*File) [WriteString](https://go-zh.org/src/os/file.go?s=5599:5656#L185)
- (1).func [Lstat](https://go-zh.org/src/os/file_unix.go?s=4305:4353#L147)
- (2).func [Stat](https://go-zh.org/src/os/file_unix.go?s=3843:3890#L134)
- (1).func (FileMode) [IsDir](https://go-zh.org/src/os/types.go?s=3070:3100#L77)
- (2).func (FileMode) [IsRegular](https://go-zh.org/src/os/types.go?s=3239:3273#L83)
- (3).func (FileMode) [Perm](https://go-zh.org/src/os/types.go?s=3350:3383#L88)
- (4).func (FileMode) [String](https://go-zh.org/src/os/types.go?s=2558:2591#L49)
- 48.type [ProcAttr](https://go-zh.org/src/os/exec.go?s=818:1712#L26)
- 49.type [Process](https://go-zh.org/src/os/exec.go?s=296:423#L4)
- (1).func [FindProcess](https://go-zh.org/src/os/doc.go?s=352:401#L2)
- (2).func [StartProcess](https://go-zh.org/src/os/doc.go?s=710:789#L13)
- (3).func (*Process) [Kill](https://go-zh.org/src/os/doc.go?s=1097:1127#L25)
- (4).func (*Process) [Release](https://go-zh.org/src/os/doc.go?s=990:1023#L20)
- (5).func (*Process) [Signal](https://go-zh.org/src/os/doc.go?s=1605:1647#L40)
- (6).func (*Process) [Wait](https://go-zh.org/src/os/doc.go?s=1442:1489#L34)
- (1).func (*ProcessState) [Exited](https://go-zh.org/src/os/doc.go?s=2037:2073#L55)
- (2).func (*ProcessState) [Pid](https://go-zh.org/src/os/exec_posix.go?s=1672:1704#L54)
- (3).func (*ProcessState) [String](https://go-zh.org/src/os/exec_posix.go?s=2001:2039#L74)
- (4).func (*ProcessState) [Success](https://go-zh.org/src/os/doc.go?s=2197:2234#L61)
- (5).func (*ProcessState) [Sys](https://go-zh.org/src/os/doc.go?s=2442:2482#L68)
- (6).func (*ProcessState) [SysUsage](https://go-zh.org/src/os/doc.go?s=2804:2849#L77)
- (8).func (*ProcessState) [SystemTime](https://go-zh.org/src/os/doc.go?s=1909:1958#L50)
- (9).func (*ProcessState) [UserTime](https://go-zh.org/src/os/doc.go?s=1753:1800#L45)
- 51.type [Signal](https://go-zh.org/src/os/exec.go?s=1868:1959#L51)
- 52.type [SyscallError](https://go-zh.org/src/os/error.go?s=752:811#L19)
以下内容主要来自:https://go-zh.org/pkg/os/,部分内容通过实践进行总结。
主要是熟悉以下相关接口,在实际开发过程中根据需要可以找到,不至于卡住开发思路。
1.概述
Package os提供了一个独立于平台的操作系统功能接口。
该设计类似于unix,尽管错误处理类似于go;失败的调用返回的是error类型的值,而不是错误号。通常,在错误中可以得到更多的信息。例如,如果接受文件名的调用失败,例如Open或Stat,则在打印时错误将包括失败的文件名,并且类型为*PathError
,可以解包以获取更多信息。
os接口在所有操作系统中是统一的。特定于系统的包sycall中出现了一般不可用的特性。
下面是一个简单的例子,打开一个文件并读取其中的一些内容。
如果打开失败,错误字符串将是不言自明的,例如
然后可以将文件的数据读入字节片。读和写的字节数取自参数slice的长度。
一些源码包:dir_unix.go doc.go env.go error.go error_unix.go exec.go exec_posix.go exec_unix.go file.go file_posix.go file_unix.go getwd.go path.go path_unix.go pipe_linux.go proc.go stat_linux.go sticky_notbsd.go str.go sys_linux.go sys_unix.go types.go types_notwin.go
2.常量
打开的标记包装底层系统的标记。不是所有的标志都可以在一个给定的系统上实现。
文件seek位置。
DevNull是操作系统的“空设备”的名称。在类unix系统中,它是"/dev/null";在Windows上,“NUL”。
3.变量
一些常见系统调用错误的可移植类似物.
Stdin、Stdout和Stderr是指向标准输入、标准输出和标准错误文件描述符的打开文件。
Args保存命令行参数,从程序名开始。
4.func Chdir
Chdir将当前工作目录更改为命名目录。如果有错误,它的类型是*PathError。
5.func Chmod
Chmod修改命名文件的模式为mode。如果文件是一个符号链接,它会改变链接目标的模式。如果有错误,它的类型是*PathError。
6.func Chown
Chown修改命名文件的数字uid和gid。如果文件是一个符号链接,它将更改链接目标的uid和gid。如果有错误,它的类型是*PathError。
7.func Chtimes
Chtimes修改命名文件的访问和修改时间,类似于Unix的utime()或utimes()函数。
底层文件系统可能会将值截断或舍入到一个不那么精确的时间单位。如果有错误,它的类型是*PathError。
8.func Clearenv
Clearenv删除所有环境变量。
9.func Environ
Environ返回一个表示环境的字符串副本,格式为"key=value"。
10.func Exit
Exit使当前程序以给定的状态码退出。按照惯例,代码0表示成功,非0表示错误。程序立即终止;延迟函数不运行。
11.func Expand
Expand根据映射函数替换字符串中的var。例如,os. expandenv (s)等价于os。扩大(年代,os.Getenv)。
12.func ExpandEnv
ExpandEnv根据当前环境变量的值替换字符串中的var。对未定义变量的引用被替换为空字符串。
13.func Getegid
Getegid返回调用者的数字有效组id。
14.func Getenv
Getenv检索key命名的环境变量的值。它返回值,如果变量不存在,该值将为空。
15.func Geteuid
Geteuid返回调用者的数字有效用户id。
16.func Getgid
Getgid返回调用者的数字组id.
17.func Getgroups
Getgroups返回调用者所属组的数字id列表。
18.func Getpagesize
返回底层系统的内存页大小。
19.func Getpid
Getpid返回调用者的进程id。
20.func Getppid
Getppid返回调用者父进程的进程id.
21.func Getuid
Getuid返回调用者的数字用户id。
22.func Getwd
Getwd返回与当前目录对应的根路径名。如果当前目录可以通过多个路径到达(由于符号链接),Getwd可以返回其中的任何一个路径。
23.func Hostname
Hostname返回内核报告的主机名.
24.func IsExist
IsExist返回一个布尔值,指示是否已知错误,以报告文件或目录已经存在。它满足于ErrExist和一些系统调用错误。
25.func IsNotExist
isnoexistist返回一个布尔值,指示是否已知错误,并报告文件或目录不存在。ErrNotExist和一些系统调用错误满足了这个要求。
26.func IsPathSeparator
如果c是目录分隔符,则IsPathSeparator返回true。
27.func IsPermission
IsPermission返回一个布尔值,指示是否已知错误,以报告权限被拒绝。它由ErrPermission和一些系统调用错误来满足.
28.func Lchown
Lchown修改命名文件的数字型uid和gid。如果文件是一个符号链接,它会更改链接本身的uid和gid。如果有错误,它的类型是*PathError。
29.func Link
Link创建newname作为到oldname文件的硬链接。如果有错误,它的类型是*LinkError。
30.func Mkdir
Mkdir使用指定的名称和权限位创建新目录。如果有错误,它的类型是*PathError。
31.func MkdirAll
MkdirAll创建一个名为path的目录,以及任何必要的父目录,并返回nil,否则返回一个错误。perm权限位用于MkdirAll创建的所有目录。如果path已经是一个目录,MkdirAll将不做任何操作并返回nil。
32.func NewSyscallError
NewSyscallError以错误的形式返回一个新的SyscallError,它具有给定的系统调用名称和错误详细信息。为方便起见,如果err为nil, NewSyscallError返回nil。
33.func Readlink
Readlink返回指定符号链接的目的地。如果有错误,它的类型是*PathError。
34.func Remove
Remove删除指定的文件或目录。如果有错误,它的类型是*PathError。
35.func RemoveAll
RemoveAll删除路径及其包含的任何子路径。它删除它所能删除的所有内容,但返回它遇到的第一个错误。如果路径不存在,RemoveAll返回nil(没有错误)。
36.func Rename
Rename重命名(移动)一个文件。特定于操作系统的限制可能适用.
37.func SameFile
SameFile报告fi1和fi2是否描述同一个文件。例如,在Unix上,这意味着两个底层结构的device和inode字段是相同的;在其他系统上,决策可能基于路径名。SameFile只应用于该包的Stat返回的结果。在其他情况下它返回false。
38.func Setenv
Setenv设置key命名的环境变量的值。它返回一个错误(如果有的话)。
39.func Symlink
Symlink创建newname作为到oldname的符号链接。如果有错误,它的类型是*LinkError。
40.func TempDir
TempDir返回用于临时文件的默认目录。
41.func Truncate
Truncate更改命名文件的大小。如果文件是一个符号链接,它会改变链接目标的大小。如果有错误,它的类型是*PathError。
42.func Unsetenv
Unsetenv取消设置单个环境变量.
43.type File
File表示打开的文件描述符。
(1).func Create
Create创建命名文件模式0666(在umask之前),如果它已经存在,则将其截断。如果成功,返回文件的方法可以用于I/O;相关的文件描述符具有O_RDWR模式。如果有错误,它的类型是*PathError。
(2).func NewFile
NewFile返回一个具有给定文件描述符和名称的新文件。
(3).func Open
打开指定文件以供读取。如果成功,返回文件的方法可以用于读取;相关的文件描述符具有O_RDONLY模式。如果有错误,它的类型是*PathError。
(4).func OpenFile
OpenFile是广义的开放调用;大多数用户将使用Open或Create代替。它以指定的标志(O_RDONLY等)和perm(0666等)打开命名文件(如果适用的话)。如果成功,返回文件上的方法可以用于I/O。如果有错误,它的类型是*PathError。
(5).func Pipe
Pipe返回一个连接的文件对;从r读取,返回写入w的字节。它返回文件和一个错误(如果有的话)。
(6).func (*File) Chdir
Chdir将当前工作目录更改为文件,该文件必须是一个目录。如果有错误,它的类型是*PathError.
(7).func (*File) Chmod
Chmod修改文件的模式为mode。如果有错误,它的类型是*PathError。
(8).func (*File) Chown
Chown修改命名文件的数字uid和gid。如果有错误,它的类型是*PathError。
(9).func (*File) Close
Close关闭文件,使其无法用于I/O。它返回一个错误(如果有的话)。
(10).func (*File) Fd
Fd返回引用打开文件的整数Unix文件描述符。文件描述符仅在f.close被调用或f被垃圾收集之前有效。
(11).func (*File) Name
Name返回打开的文件的名称。
(12).func (*File) Read
Read从文件中读取len(b)字节。它返回读取的字节数和一个错误(如果有的话)。EOF的信号是零计数,err设置为io.EOF。
(13).func (*File) ReadAt
ReadAt从文件的字节偏移量off开始读取len(b)字节。它返回读取的字节数和错误(如果有的话)。当n < len(b)时,ReadAt总是返回一个非空错误。文件末尾的错误是io.EOF。
(14).func (*File) Readdir
Readdir读取与file相关的目录内容,并返回一个片,最多包含n个FileInfo值,就像Lstat按照目录顺序返回的那样。后续对同一文件的调用将产生更多的文件信息。
如果n > 0, Readdir最多返回n个FileInfo结构。在这种情况下,如果Readdir返回一个空片,它将返回一个非空错误解释原因。在目录的末尾,错误是io.EOF。
如果n <= 0, Readdir将从单个切片中返回该目录的所有FileInfo。在本例中,如果Readdir成功(一直读取到目录的末尾),它将返回切片和nil错误。如果它在目录结束之前遇到错误,Readdir将返回该点之前读取的文件信息和一个非空错误。
(15).func (*File) Readdirnames
Readdirnames从目录f读取并返回一个名称片。
如果n > 0, Readdirnames最多返回n个名称。在这种情况下,如果Readdirnames返回一个空片,它将返回一个非空错误解释原因。在目录的末尾,错误是io.EOF。
如果n <= 0, Readdirnames返回单个片中目录中的所有名称。在本例中,如果Readdirnames成功(一直读取到目录的末尾),它将返回切片和nil错误。如果它在目录结束之前遇到错误,Readdirnames将返回在该点之前读取的名称和一个非空错误。
(16).func (*File) Seek
Seek将下一个读或写文件的偏移量设置为偏移量,根据偏移量解释:0表示相对于文件的原点,1表示相对于当前偏移量,2表示相对于末尾。它返回新的偏移量和一个错误(如果有的话)。
(17).func (*File) Stat
Stat返回描述文件的FileInfo结构。如果有错误,它的类型是*PathError。
(18).func (*File) Sync
Sync将文件的当前内容提交到稳定存储。通常,这意味着刷新文件系统中最近写入到磁盘的数据的内存副本。
(19).func (*File) Truncate
Truncate更改文件的大小。它不会改变I/O偏移量。如果有错误,它的类型是*PathError。
(20).func (*File) Write
Write将len(b)字节写入文件。它返回已写入的字节数和一个错误(如果有的话)。当n != len(b)时,Write返回一个非空错误。
(21).func (*File) WriteAt
WriteAt从字节偏移量off开始将len(b)字节写入文件。它返回已写入的字节数和一个错误(如果有的话)。当n != len(b)时,WriteAt返回一个非空错误。
(22).func (*File) WriteString
WriteString与Write类似,但写入字符串s的内容,而不是字节片。
44.type FileInfo
FileInfo描述一个文件,由Stat和Lstat返回。
(1).func Lstat
Lstat返回一个描述命名文件的文件信息。如果文件是一个符号链接,则返回的FileInfo描述这个符号链接。Lstat没有尝试跟踪该链接。如果有错误,它的类型是*PathError
(2).func Stat
Stat返回一个描述命名文件的文件信息。如果有错误,它的类型是*PathError。
45.type FileMode
文件模式表示文件的模式位和权限位。位在所有系统上具有相同的定义,因此有关文件的信息可以从一个系统移动到另一个系统。并不是所有的bits都适用于所有的系统。唯一需要的位是目录的ModeDir。
定义的FileMode位是文件模式的最有效位。最低有效位是标准的Unix rwxrwxrwx权限。这些位的值应该被认为是公共API的一部分,并且可以在有线协议或磁盘表示中使用:它们不能被更改,尽管可能会添加新的位。
(1).func (FileMode) IsDir
IsDir报告m是否描述目录。也就是说,它测试m中是否设置了moddir位。
(2).func (FileMode) IsRegular
IsRegular报告m是否描述常规文件。也就是说,它测试没有设置模式类型位。
(3).func (FileMode) Perm
Perm返回m中的Unix权限位。
(4).func (FileMode) String
46.type LinkError
LinkError记录在链接、符号链接或重命名系统调用期间的错误以及导致错误的路径
(1).func (*LinkError) Error
47.type PathError
PathError记录错误以及导致错误的操作和文件路径。
(1).func (*PathError) Error
48.type ProcAttr
ProcAttr保存了将应用于由StartProcess启动的新进程的属性。
49.type Process
Process存储StartProcess创建的进程信息.
(1).func FindProcess
FindProcess根据进程的pid查找正在运行的进程。它返回的进程可用于获取有关底层操作系统进程的信息。
(2).func StartProcess
StartProcess使用程序、参数和由name、argv和attr指定的属性启动一个新进程。
StartProcess是一个低级接口。os/exec包提供了更高级的接口。
如果有错误,它的类型是*PathError。
(3).func (*Process) Kill
Kill导致进程立即退出。
(4).func (*Process) Release
Release释放与流程p相关的所有资源,使其在未来不可用。只有在没有Wait的情况下才需要调用Release.
(5).func (*Process) Signal
Signal向进程发送信号。在Windows上不实现发送中断
(6).func (*Process) Wait
Wait等待进程退出,然后返回描述其状态的ProcessState和错误(如果有的话)。Wait释放与该进程相关的所有资源。在大多数操作系统中,进程必须是当前进程的子进程,否则将返回错误。
50.type ProcessState
ProcessState存储关于进程的信息,如Wait所报告的那样。
(1).func (*ProcessState) Exited
Exited报告程序是否已经退出.
(2).func (*ProcessState) Pid
Pid返回退出进程的进程id.
(3).func (*ProcessState) String
(4).func (*ProcessState) Success
Success报告程序是否成功退出,例如在Unix上退出状态为0。
(5).func (*ProcessState) Sys
返回与系统相关的进程退出信息。将其转换为适当的底层类型,例如系统调用。在Unix上的WaitStatus,以访问其内容。
(6).func (*ProcessState) SysUsage
SysUsage返回与退出进程相关的系统资源使用信息。将其转换为适当的底层类型,例如*syscall。以访问它的内容。(在Unix系统调用。与getrusage(2)手册页中定义的struct Rusage匹配。)
(8).func (*ProcessState) SystemTime
SystemTime返回退出进程及其子进程的系统CPU时间.
(9).func (*ProcessState) UserTime
UserTime返回退出的进程及其子进程的用户CPU时间。
51.type Signal
一个信号代表一个操作系统信号。通常的底层实现是依赖于操作系统的:在Unix上是sycall.signal。
唯一保证在所有系统上存在的信号值是Interrupt(给进程发送一个中断)和Kill(强制进程退出)。
52.type SyscallError
SyscallError记录来自特定系统调用的错误。
(1).func (*SyscallError) Error