os
最后更新于:2022-04-02 02:45:17
[TOC]
## 语法
```
func Getpid() int // 获取pid
func Getppid() int // 获取符pid
func Hostname() (name string, err error)
func NewSyscallError(syscall string, err error) error
func Pipe() (r *File, w *File, err error)
```
## 实例
### Change
#### Chdir 改变工作空间
```
os.Chdir("test2")
ioutil.WriteFile("a.txt", nil, os.ModePerm)
```
会在运行路径的test2下创建文件
#### Chmod
#### Chown / Lchown
#### Chtimes
### 文件操作
#### Create
```
file, e := os.Create("test.txt")
if e != nil {
fmt.Println(e)
}
n, err := file.WriteString("asdasdasd"))
if err != nil {
fmt.Println(err)
}
fmt.Println(n)
```
#### OpenFile 写入/追加内容
```
O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件
O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件
O_RDWR int = syscall.O_RDWR // 读写模式打开文件
O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部
O_CREATE int = syscall.O_CREAT // 如果不存在将创建一个新文件
O_EXCL int = syscall.O_EXCL // 和O_CREATE配合使用,文件必须不存在
O_SYNC int = syscall.O_SYNC // 打开文件用于同步I/O
O_TRUNC int = syscall.O_TRUNC // 如果可能,打开时清空文件
f, err := os.OpenFile("access.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
log.Fatal(err)
}
if _, err := f.Write([]byte("appended some data\n")); err != nil {
f.Close() // ignore error; Write error takes precedence
log.Fatal(err)
}
if err := f.Close(); err != nil {
log.Fatal(err)
}
```
#### Rename
#### Remove / RemoveAll 删除文件或目录
#### Stat / Lstat 获取文件信息
```
type FileInfo interface {
Name() string // base name of the file
Size() int64 // length in bytes for regular files; system-dependent for others
Mode() FileMode // file mode bits
ModTime() time.Time // modification time
IsDir() bool // abbreviation for Mode().IsDir()
Sys() interface{} // underlying data source (can return nil)
}
FileInfo, _ := os.Stat("test4.go")
```
#### link 复制文件-硬链接
```
e:= os.Link("build.bat", "build.txt")
```
#### Symlink 创建软连接
#### Readlink 符号对应的文件
#### SameFile 判断是否相同
#### Truncate 切断文件为指定大小
### 目录
#### Mkdir / MkdirAll 创建目录
### 环境变量
#### Clearenv 清空所有的环境变量
#### Environ 打印环境变量
#### Getenv 获取变量
```
func Getenv(key string) string
```
#### LookupEnv 查看,并判断是否有值
```
func LookupEnv(key string) (string, bool)
```
#### Setenv 设置变量
#### Unsetenv 删除变量
```
for _, v := range os.Environ() {
fmt.Println(v)
}
```
#### ExpandEnv 字符串 $foo 替换环境变量
```
shell := "goroot : $GOROOT"
//shell := "goroot : ${GOROOT}" // 等效
fmt.Print(os.ExpandEnv(shell))
```
### 获取当前路径
#### Executable - go run 时,返回临时路径
#### Getwd 返回当前路径
### 权限id
#### Getegid 有效用户组调用者返回数值的
#### Geteuid 有效用户id调用者返回数值的
#### Getuid 返回调用者的数字用户id
#### Getgid 获取调用者的组id
### pid 与 父 pid
#### Getpid
#### Getppid
### 用户目录与零食目录
#### UserHomeDir
window
```
C:\Users\idcpj
```
#### UserCacheDir
widnow
```
C:\Users\idcpj\AppData\Local
```
#### UserConfigDir
widnow
```
C:\Users\idcpj\AppData\Roaming
```
#### TempDir() 系统的临时文件
### err 判断
#### IsPathSeparator 是否目录分隔符
#### IsExist
#### IsNotExist
#### IsPermission 有权限
### Args 获取参数
```
os.Args[0]
```
### Exit 结束程序
';