1 输入输出的底层原理
终端其实是一个文件,相关实例如下:
- os.Stdin:标准输入的文件实例,类型为*File
- os.Stdout:标准输出的文件实例,类型为*File
- os.Stderr:标准错误输出的文件实例,类型为*File
以文件的方式操作终端:
package mainimport ("os")func main() {var buf [16]byteos.Stdin.Read(buf[:])os.Stdout.WriteString(string(buf[:]))}
2 文件操作相关API
// 根据提供的文件名创建新的文件,返回一个文件对象,默认权限是0666func Create(name string) (file *File, err Error)// 根据文件描述符创建相应的文件,返回一个文件对象func NewFile(fd uintptr, name string) *File// 只读方式打开一个名称为name的文件func Open(name string) (file *File, err Error)// 打开名称为name的文件,flag是打开的方式,只读、读写等,perm是权限func OpenFile(name string, flag int, perm uint32) (file *File, err Error)// 写入byte类型的信息到文件, 追加写func (file *File) Write(b []byte) (n int, err Error)// 在指定位置开始写入byte类型的信息func (file *File) WriteAt(b []byte, off int64) (n int, err Error)// 写入string信息到文件func (file *File) WriteString(s string) (ret int, err Error)// 读取数据到b中func (file *File) Read(b []byte) (n int, err Error)// 从off开始读取数据到b中func (file *File) ReadAt(b []byte, off int64) (n int, err Error)// 删除文件名为name的文件func Remove(name string) Error
(1) OpenFile和Open的区别
Open()只读打开一个文件, 若文件不存在返回err
OpenFile()可以设置读写, 不存在可自动创建, 还可以指定文件权限
// w写 r读 x执行 r4 w2 x1file, err := os.OpenFile("./xxx.txt", os.O_CREATE|os.O_WRONLY, 0666) // 非目录 可读可写
