GO语言-文件IO处理1

文件IO处理

网络IO面向的是网络设备,本地IO面向的是笨的磁盘设备,我们经常看到的屏幕输出其实操作的是终端设备。

文件描述符

文件描述符是一个非常抽象的概念,它是一个描述文件的符号,我们不必去关注它到底是什么,我们只需要知道它的功能是操控文件。操控文件指的是读文件、写文件、调整文件读写位置等功能。

mermaid graph TD .txt文件描述符 --> 读缓冲区/写缓冲区 -->通过设备驱动 -->输出 通过文件描述符,程序可以将数据写入缓冲区,缓冲区的刷新机制会将内容通过设备驱动(不同的设备驱动各异)保存到磁盘,在读取文件时,只需程序逆向,原理相同。

os操作相关API

源码以及相关参数含义 ```go func OpenFile(name string, flag int, perm FileMode) (*File, error) { testlog.Open(name) f, err := openFileNolog(name, flag, perm) if err != nil { return nil, err } f.appendMode = flag&O_APPEND != 0

return f, nil } ``` - name: 要打开的文件名 - flag:要打开的文件权限,采取位指示器的方式 - ORDONLY:只读,必选项,与只写、读写三选一 - OWRONLY:只写 - ORDWR:读写 - OCREATE:创建文件 - O_TRUNC:截断文件

perm:8进制文件权限位,与umask共同作用,决定最终文件权限位。

OpenFile返回的结果操作文件

go // 读取文件内容到b(b为自建缓冲区) func (f *File) Read(b []byte) (n int, err error) { if err := f.checkValid("read"); err != nil { return 0, err } n, e := f.read(b) return n, f.wrapErr("read", e) } //将缓冲区b的内容写入文件 func (f *File) Write(b []byte) (n int, err error) { if err := f.checkValid("write"); err != nil { return 0, err } n, e := f.write(b) if n < 0 { n = 0 } if n != len(b) { err = io.ErrShortWrite } 注:还有函数WriteString它是以另一种形式写入文件,传递的参数为string类型。 Seek函数用来调整读写位置,返回调整的距离和错误信息。

本文正在参加技术专题18期-聊聊Go语言框架

猜你喜欢

转载自blog.csdn.net/y943711797/article/details/125846642