GoLang之标准库os包

本文详细介绍了Go语言标准库os的各种功能,包括错误处理、文件操作模式、文件对象方法如Close、Write、Read等,以及文件创建、删除、重命名、权限修改等系统级操作。还展示了Open、OpenFile、Create函数的使用示例,以及获取主机名、当前工作目录、进程ID等系统信息的方法。
摘要由CSDN通过智能技术生成

GoLang之标准库os包

1.io.EOF错误

io.EOF 是在没有任何可读取的内容时触发,比如某文件Reader对象,文件本身为空,或者读取若干次后,文件指针指向了末尾,调用Read都会触发EOF

2.perm参数权限

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.os.O_RDONLY等常量

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   // 打开文件用于同步I/O
    O_TRUNC  int = syscall.O_TRUNC  // 如果可能,打开时清空文件
)

4.os.File结构体

type File struct {
	*file // os specific
}
//注意:file仍然是os包里的,但是由于小写所以用不到
type file struct {
	pfd        poll.FD
	name       string
	dirinfo    *dirInfo // nil unless directory being read
	appendMode bool     // whether file is opened for appending
}

5.os.File{}.Close()方法

对文件进行操作后,一定要关闭文件,Close关闭文件f,使文件不能用于读写。它返回可能出现的错误

func (f *File) Close() error {
	if f == nil {
		return ErrInvalid
	}
	return f.file.close()
}

6.os.File{}.Write()方法

写入byte类型的信息到文件;
Write向文件中写入len(b)字节数据;
它返回写入的字节数和可能遇到的任何错误。如果返回值n!=len(b),本方法会返回一个非nil的错误

func (f *File) Write(b []byte) (n int, err error) {}

7.os.File{}.WriteString()方法

写入string信息到文件,WriteString类似Write,但接受一个字符串参数

func (f *File) WriteString(s string) (n int, err error) {}

8.os.File{}.WriteAt()方法

WriteAt在指定的位置(相对于文件开始位置)写入len(b)字节数据;
它返回写入的字节数和可能遇到的任何错误;
如果返回值n!=len(b),本方法会返回一个非nil的错误。

func (f *File) WriteAt(b []byte, off int64) (n int, err error){}

9.os.File{}.Read()方法

Read方法从f中读取最多len(b)字节数据并写入b;
它返回读取的字节数和可能遇到的任何错误;
文件终止标志是读取0个字节且返回值err为io.EOF

func (f *File) Read(b []byte) (n int, err error) {}

10.os.File{}.ReadAt()方法

ReadAt从指定的位置(相对于文件开始位置)读取len(b)字节数据并写入b;
它返回读取的字节数和可能遇到的任何错误;
当n<len(b)时,本方法总是会返回错误;
如果是因为到达文件结尾,返回值err会是io.EOF。

func (f *File) ReadAt(b []byte, off int64) (n int, err error) {}

11.os.Open函数只读文件

Open函数用打开一个文件知识为了读取不需要写的场景下;
Open打开一个文件用于读取。如果操作成功,返回的文件对象的方法可用于读取数据;对应的文件描述符具有O_RDONLY模式。如果出错,错误底层类型是*PathError

11.1只打开文件

package main

import (
	"fmt"
	"os"
)

func main() {
	/*func Open(name string) (*File, error) {
		return OpenFile(name, O_RDONLY, 0)
	}*/
	
	// 只读方式打开当前目录下的main.go文件
	file, err := os.Open("./main.go")
	if err != nil {
		fmt.Println("open file failed!, err:", err)
		return
	}
	// 关闭文件
	file.Close()
	//注意:运行完该代码后,系统不会有任何输出
}

11.2打开并进行读取文件

package main

import (
	"fmt"
	"io"
	"os"
)

func main() {
	// 打开文件
	file, err := os.Open("./xxx.txt")
	if err != nil {
		fmt.Println("open file err :", err)
		return
	}
	defer file.Close()
	// 定义接收文件读取的字节数组
	var buf [128]byte
	var content []byte
	for {
		//注意:每次进行写的时候都会清除切片里原本的内容进行重新写
		//Read方法从file中读取最多len(b)字节数据并写入buf;
		n, err := file.Read(buf[:]) //[:]表示原有的切片,即把[128]byte数组转换成长度为128的切片
		if err == io.EOF {
			// 读取结束
			break
		}
		if err != nil {
			fmt.Println("read file err ", err)
			return
		}
		content = append(content, buf[:n]...)
	}
	fmt.Println(string(content))
}

12.os.OpenFile函数

打开名称为name的文件,flag是打开的方式,只读、读写等,perm是权限

func OpenFile(name string, flag int, perm FileMode) (*File, error) {}

13.os.Create函数创建文件

13.1无文件的情况下创建并进行写

根据提供的文件名创建新的文件,返回一个文件对象,默认权限是0666

package main

import (
	"fmt"
	"os"
)

func main() {
	/*func Create(name string) (*File, error) {
		return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666)
	}
	*/
	// 不用自己手动创建,系统会自己建的
	file, err := os.Create("./xxx.txt")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer file.Close()
	for i := 0; i < 5; i++ {
		file.WriteString("ab\n")
		file.Write([]byte("cd\n"))
	}
}

在这里插入图片描述

13.2有文件的情况下创建并进行写:

在这里插入图片描述

package main

import (
	"fmt"
	"os"
)

func main() {

	// 我们提前建了一个xxx.txt文件,并在里面写了内容;运行代码后系统会把文件里的内容清楚掉,再进行写
	file, err := os.Create("./xxx.txt")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer file.Close()
	for i := 0; i < 5; i++ {
		file.WriteString("ab\n")
		file.Write([]byte("cd\n"))
	}
}

在这里插入图片描述

13.3拷贝文件

package main

import (
    "fmt"
    "io"
    "os"
)

func main() {
    // 打开源文件
    srcFile, err := os.Open("./xxx.txt")
    if err != nil {
        fmt.Println(err)
        return
    }
    // 创建新文件
    dstFile, err2 := os.Create("./abc2.txt")
    if err2 != nil {
        fmt.Println(err2)
        return
    }
    // 缓冲读取
    buf := make([]byte, 1024)
    for {
        // 从源文件读数据
        n, err := srcFile.Read(buf)
        if err == io.EOF {
            fmt.Println("读取完毕")
            break
        }
        if err != nil {
            fmt.Println(err)
            break
        }
        //写出去
        dstFile.Write(buf[:n])
    }
    srcFile.Close()
    dstFile.Close()
}

14.os.Hostname函数获取主机名

func Hostname() (name string, err error) {
	return hostname()
}

15.os.Getwd函数获取当前目录

func Getwd() (dir string, err error) {}

16. os.Getpid函数获取当前进程ID

func Getpid() int { return syscall.Getpid() }

17. os.Getppid函数获取当前进程ID

func Getppid() int { return syscall.Getppid() }

18.os.Exit函数退出当前进程

func Exit(code int) {}

19.os.Mkdir函数创建目录,不能创建多级

func Mkdir(name string, perm FileMode) error {}

20.os.MkdirAll函数创建多级目录

func MkdirAll(path string, perm FileMode) error {}

21.os.Remove函数只能删除一个空的目录或一个文件

func Remove(name string) error {}

22.os.RemoveAll函数可以强制删除目录以及目录汇中的文件

func RemoveAll(path string) error {
	return removeAll(path)
}

23.os.Rename函数重命名文件

func Rename(oldpath, newpath string) error {
	return rename(oldpath, newpath)
}

24.os.Chmod函数修改文件权限

func Chmod(name string, mode FileMode) error { return chmod(name, mode) }

25.os.Chown函数修改文件所有者

func Chown(name string, uid, gid int) error {

26.os.Getenv函数获取环境变量的值

func Getenv(key string) string {}

27.os.Setenv函数设置环境变量

func Setenv(key, value string) error {}
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GoGo在努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值