1 输入输出的底层原理

终端其实是一个文件,相关实例如下:

  • os.Stdin:标准输入的文件实例,类型为*File
  • os.Stdout:标准输出的文件实例,类型为*File
  • os.Stderr:标准错误输出的文件实例,类型为*File

以文件的方式操作终端:

  1. package main
  2. import (
  3. "os"
  4. )
  5. func main() {
  6. var buf [16]byte
  7. os.Stdin.Read(buf[:])
  8. os.Stdout.WriteString(string(buf[:]))
  9. }

2 文件操作相关API

  1. // 根据提供的文件名创建新的文件,返回一个文件对象,默认权限是0666
  2. func Create(name string) (file *File, err Error)
  3. // 根据文件描述符创建相应的文件,返回一个文件对象
  4. func NewFile(fd uintptr, name string) *File
  5. // 只读方式打开一个名称为name的文件
  6. func Open(name string) (file *File, err Error)
  7. // 打开名称为name的文件,flag是打开的方式,只读、读写等,perm是权限
  8. func OpenFile(name string, flag int, perm uint32) (file *File, err Error)
  9. // 写入byte类型的信息到文件, 追加写
  10. func (file *File) Write(b []byte) (n int, err Error)
  11. // 在指定位置开始写入byte类型的信息
  12. func (file *File) WriteAt(b []byte, off int64) (n int, err Error)
  13. // 写入string信息到文件
  14. func (file *File) WriteString(s string) (ret int, err Error)
  15. // 读取数据到b中
  16. func (file *File) Read(b []byte) (n int, err Error)
  17. // 从off开始读取数据到b中
  18. func (file *File) ReadAt(b []byte, off int64) (n int, err Error)
  19. // 删除文件名为name的文件
  20. func Remove(name string) Error

(1) OpenFile和Open的区别

Open()只读打开一个文件, 若文件不存在返回err
OpenFile()可以设置读写, 不存在可自动创建, 还可以指定文件权限

  1. // w写 r读 x执行 r4 w2 x1
  2. file, err := os.OpenFile("./xxx.txt", os.O_CREATE|os.O_WRONLY, 0666) // 非目录 可读可写