os
包提供了与平台无关的接口以便于为我们提供对系统进行操作函数.导入方式为 import "os"
常用类型定义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| type FileMode uint32
type File struct { }
type FileInfo interface { Name() string Size() int64 Mode() FileMode ModTime() time.Time IsDir() bool Sys() interface{} }
|
常用常量及变量
以下提供了 os
包中的常用常量,包含文件的类型权限,属性等
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| 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 套接字文件 ModeSetuid // u: setuid ModeSetgid // g: setgid ModeCharDevice // c: Unix 字符设备 ModeSticky // t: sticky ModeIrregular // ?: 非常规文件
// 类型的掩码,对于常规文件,设置为 none ModeType = ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | ModeDevice | ModeCharDevice | ModeIrregular
ModePerm FileMode = 0777 // Unix 权限位 ) const ( // 必须指定 O_RDONLY, O_WRONLY, O_RDWR 之一 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 // 打开时清空文件内容 ) const ( SEEK_SET int = 0 // 相对于文件开始位置,已过时,而使用 io.SeekStart SEEK_CUR int = 1 // 相对于文件当前位置,已过时,而使用 io.SeekCurrent SEEK_END int = 2 // 相对于文件结尾位置,已过时,而使用 io.SeekEnd ) const ( PathSeparator = '/' // Unix 操作系统指定的路径分隔符 PathListSeparator = ':' // Unix 操作系统指定的表分隔符 ) const ( PathSeparator = '\\' // Windows 操作系统指定的路径分隔符 PathListSeparator = ';' // Windows 操作系统指定的表分隔符 )
var ( Stdin = NewFile(uintptr(syscall.Stdin), "/dev/stdin") Stdout = NewFile(uintptr(syscall.Stdout), "/dev/stdout") Stderr = NewFile(uintptr(syscall.Stderr), "/dev/stderr") )
|
常用函数
os
包函数
系统相关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| func Hostname() (name string, err error)
func Environ() []string
func Getenv(key string) string
func Setenv(key, value string) error
func Clearenv()
func Exit(code int) func Getuid() int // 返回调用者的用户ID func Getgid() int // 返回调用者的组ID func Getpid() int // 返回当前程序的进程ID func Getppid() int // 返回当前进程的父进程ID
|
文件相关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| func Stat(name string) (fi FileInfo, err error)
func Create(name string) (file *File, err error)
func Open(name string) (file *File, err error)
func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
func IsExist(err error) bool
func IsExist(err error) bool
func IsPermission(err error) bool
func Getwd() (dir string, err error)
func Chdir(dir string) error
func Chmod(name string, mode FileMode) error
func Chown(name string, uid, gid int) error
func Chtimes(name string, atime time.Time, mtime time.Time) error
func Mkdir(name string, perm FileMode) error
func MkdirAll(path string, perm FileMode) error
func Rename(oldpath, newpath string) error
func Remove(name string) error
func RemoveAll(path string) error
func Symlink(oldname, newname string) error
func TempDir() string
|
File
结构体方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| func (f *File) Name() string
func (f *File) Stat() (fi FileInfo, err error)
func (f *File) Fd() uintptr
func (f *File) Chmod(mode FileMode) error
func (f *File) Chown(uid, gid int) error
func (f *File) Truncate(size int64) error
func (f *File) Read(b []byte) (n int, err error)
func (f *File) ReadAt(b []byte, off int64) (n int, err error)
func (f *File) Write(b []byte) (n int, err error)
func (f *File) WriteString(s string) (ret int, err error)
func (f *File) WriteAt(b []byte, off int64) (n int, err error)
func (f *File) Seek(offset int64, whence int) (ret int64, err error)
func (f *File) Sync() (err error)
func (f *File) Close() error
|
示例
文件读写示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| import ( "fmt" "os" )
func main() { file, err := os.OpenFile("filename", os.O_RDWR|os.O_CREATE|os.O_SYNC|os.O_APPEND, 0) if err != nil { fmt.Println("err", err) return } defer file.Close()
var bytes = []byte{'a', 'b', 'c', 'd', '\n'} file.Write(bytes) str := "this is string to write\n" var strBytes = []byte(str) file.Write(strBytes) file.WriteString(str)
buffer := make([]byte, 1024) file.Seek(0, 0) for { len, err := file.Read(buffer) if len == 0 && err != nil { break } fmt.Print(string(buffer[:len])) } }
|
os
包没有直接提供对文件按行读取的方法,我们需要借助 bufio
包来实现