os包提供了操作系统函数的不依赖平台的接口。设计为Unix风格的,虽然错误处理是go风格的;失败的调用会返回错误值而非错误码。通常错误值里包含更多信息。
os包的接口规定为在所有操作系统中都是一致的。非公用的属性可以从操作系统特定的syscall包获取。
1、常量定义
文件相关:
// 文件打开时指定的打开模式
const (
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 // 打开文件用于同步IO
O_TRUNC int = syscall.O_TRUNC // 截断文件,清空数据
)
// 移动文件指针时指定相对于哪个位置移动
const (
SEEK_SET int = 0 // 相对与文件开始的位置移动文件指针
SEEK_CUR int = 1 // 相对于当前指针位置移动文件指针
SEEK_END int = 2 // 当对于文件尾部移动文件指针
)
// 文件分隔符以及表分隔符
// Windows下为:
const (
PathSeparator = '\\'
PathListSeparator = ';'
)
// Unix下为:
const (
PathSeparator = '/'
PathListSeparator = ':'
)
2、函数定义
2.1 Hostname()
返回内核提供的主机名。
func Hostname() (name string, err error)
2.2 Getpagesize()
返回一页内存的大小。
func Getpagesize() int
2.3 Getwd()
获取当前工作目录。
func Getwd() (dir string, err error)
2.4 Open()/OpenFile()
打开文件。
第二个函数在创建并打开文件时使用。name:要创建的文件名;flag:打开模式;perm:文件的权限。
func Open(name string) (*File, error)
func OpenFile(name string, flag int, perm FileMode) (*File, error)
2.5 Exit()
退出当前进程。code:退出码,0一般表示成功
func Exit(code int)
2.6 Create()
创建一个文件。
func Create(name string) (*File, error) {
return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666)
}
2.7 Chdir()
改变当前工作目录。
func Chdir(dir string) error
2.8 Chmod()
修改文件的访问权限。
func Chmod(name string, mode FileMode) error
2.9 用户、用户组
在Windows下前四个函数都返回-1
func Getuid() int { return syscall.Getuid() }
func Geteuid() int { return syscall.Geteuid() }
func Getgid() int { return syscall.Getgid() }
func Getegid() int { return syscall.Getegid() }
func Getgroups() ([]int, error)
2.9 IsPathSeparator()
判断是否是文件分隔符
func IsPathSeparator(c uint8) bool {
// NOTE: Windows accept / as path separator.
return c == '\\' || c == '/'
}
2.10 Link()
Link创建一个新文件作为旧文件的硬链接。
func Link(oldname, newname string) error
2.11 Mkdir()
Mkdir创建一个目录并指定权限。
func Mkdir(name string, perm FileMode) error
2.12 NewFile()
NewFile根据给定的文件描述符以及名字来创建一个文件。
func NewFile(fd uintptr, name string) *File
2.13 Pipe()
Pipe用于创建一个Unix的管道,w用于写,r用于读
func Pipe() (r *File, w *File, err error)
2.14 ReadFile()
读取文件,在ReadFile中会先打开文件,然后获取文件的大小,创建一个缓冲区读取文件并返回读取的字节切片。
func ReadFile(name string) ([]byte, error)
2.15 Readlink()
ReadLink返回符合链接的目的文件名。
func Readlink(name string) (string, error)
2.16 Remove()/RemoveAll()
Remove删除一个文件或一个目录。如果目录中有其它文件就无法删除。
Remove可以用于删除一个目录,即使目录中有其它文件。
func Remove(name string) error
func RemoveAll(path string) error
2.17 Rename()
Rename 重命名一个文件
func Rename(oldpath, newpath string) error
2.18 Symlink()
Symlink创建一个符号链接
unc Symlink(oldname, newname string) error
2.19 Truncate()
Truncate改变一个文件的大小。
func Truncate(name string, size int64) error
2.20 WriteFile
WriteFile 向一个文件中写入数据,如果不存在则创建。
func WriteFile(name string, data []byte, perm FileMode) error
2.21 Chown()
改变文件的拥有者
func Chown(name string, uid, gid int) error
2.22 Environ()
获取环境变量,以键值对的形式
func Environ() []string
2.23 ReadDir()
ReadDir读取一个文件并返回一个DirEntry的切片
func ReadDir(name string) ([]DirEntry, error)
2.24 Setenv()
设置环境变量
func Setenv(key, value string) error
2.25 Stat()
获取一个文件的信息。例如:文件名、文件大小、是否是目录等。
func Stat(name string) (FileInfo, error)
2.26 StartProcess()
StartProcess 使用程序、参数和属性启动一个新进程
func StartProcess(name string, argv []string, attr *ProcAttr) (*Process, error)
3、结构体或接口及其方法定义
3.1 FileMode
文件类型。
type FileMode uint32
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权限位(用于通过&获取类型位)
)
3.1.1 func (FileMode) IsDir()
判断一个文件是否是目录
func (m FileMode) IsDir() bool
3.1.2 func (FileMode) IsRegular()
判断一个文件是否是普通文件
func (m FileMode) IsRegular() bool
3.1.3 func (m FileMode) Perm()
Perm方法返回m的Unix权限位。
func (m FileMode) Perm() FileMode
3.1.4 func (FileMode) String()
获取文件类型、拥有者、所属组、其它人的权限,例如:drwxr-xr-x
func (m FileMode) String() string
3.2 FileInfo
FileInfo描述一个文件的信息,Stat函数返回一个FileInfo
type FileInfo interface {
Name() string // 文件名(不含扩展名)
Size() int64 // 普通文件的字节大小
Mode() FileMode // 文件的模式位
ModTime() time.Time // 文件的修改时间
IsDir() bool // 是否是目录,等价于 Mode().IsDir()
Sys() interface{} // 底层数据来源(可以返回nil)
}
3.3 File
File代表一个打开的文件描述符。
type File struct {
*file // 操作系统相关的
}
方法:
// 关闭文件描述符
func (f *File) Close() error
// 读取文件
func (f *File) read(b []byte) (n int, err error)
func (f *File) pread(b []byte, off int64) (n int, err error)
// 写文件
func (f *File) write(b []byte) (n int, err error)
func (f *File) pwrite(b []byte, off int64) (n int, err error)
// 改变文件访问权限
func (f *File) chmod(mode FileMode) error
// 改变文件所属用户以及组
func (f *File) Chown(uid, gid int) error
// 截断文件,清空内容
func (f *File) Truncate(size int64) error
// 移动文件位置 相对于 mv
func (f *File) Chdir() error
// 设置文件读取写入的超时时间
func (f *File) setDeadline(t time.Time) error
func (f *File) setReadDeadline(t time.Time) error
func (f *File) setWriteDeadline(t time.Time) error
// 获取文件描述符
func (file *File) Fd() uintptr
// 移动文件指针
func (f *File) seek(offset int64, whence int) (ret int64, err error)
// 获取文件属性
func (file *File) Stat() (FileInfo, error)
3.4 Process
Process保管一个被StarProcess创建的进程的信息。
type Process struct {
Pid int // 进程id
handle uintptr
isdone uint32
sigMu sync.RWMutex
}
3.4.1 func FindProcess
FindProcess根据进程id查找一个运行中的进程。函数返回的进程对象可以用于获取其关于底层操作系统进程的信息。
func FindProcess(pid int) (p *Process, err error)
3.4.2 func StartProcess(name string, argv []string, attr *ProcAttr)
StartProcess使用提供的属性、程序名、命令行参数开始一个新进程。
func StartProcess(name string, argv []string, attr *ProcAttr) (*Process, error)
3.4.3 func (*Process) Signal
Signal方法向进程发送一个信号。在windows中向进程发送Interrupt信号尚未实现。
func (p *Process) Signal(sig Signal) error
3.4.4 func (*Process) Kill
Kill让进程立刻退出。
func (p *Process) Kill() error
3.4.5 func (*Process) Wait
等待子进程退出。
func (p *Process) Wait() (*ProcessState, error)