文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

GoLang OS包及File类型源码分析

2023-07-05 13:46

关注

这篇文章主要介绍“GoLang OS包及File类型源码分析”,在日常操作中,相信很多人在GoLang OS包及File类型源码分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”GoLang OS包及File类型源码分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、OS包的作用

os包中的API主要可以帮助我们使用操作系统中的文件系统、权限系统、环境变量、系统进程,以及系统信号。

对于类Unix的操作系统,其中的一切都可以被看作文件。因此可以利用os.File类型操作的东西很多。

本篇文章把os.File 类型应用于常规的文件。

二、os.File类型实现了哪些io包的接口

os.File拥有的都是指针方法,所以除了空接口以外,它本身没有实现任何接口。而它的指针类型则实现了很多io代码包中的接口。

由于·*os.File没有实现简单接口io.ByteReaderio.RuneReader,所以它没有实现它没有实现作为它两者的扩展接口:io.ByteScannerio.RuneScanner

所以,os.File可以读写文件,并读取和设定下一次读写的起始索引位置。还可以对文件进行关闭。但是,并不能专门地读取文件的下一个字节,或者写一个Unicode字符,也不能进行任何的读回退操作。

三、创建os.File类型的指针类型

在os包中,有这样几个函数:Create、NewFile、Open和OpenFile。

3.1 os.Create

os.Create函数用于根据指定的路径创建一个新的文件。

使用这个函数创建的文件,对于操作系统中的所有用户来说,都是可以读和写的。

3.2 os.NewFile

该函数在被调用的时候,需要接受一个代表文件描述符的uintptr类型的值,以及一个用于表示文件名的字符值。

这个函数的功能并不是创建一个新的文件,而是依据一个已经存在的文件描述符,来新建一个包装了该文件的File值。

3.3 os.Open

os.Open函数会打开一个文件并返回包装了该文件的File值。然而,该函数只能以只读模式打开文件。

换句话说,我们只能从该函数返回的File值中读取内容,而不能向它写入任何内容。

如果调用它的任何一个写入方法,都会得到一个表示“坏的文件描述符”的错误值。

os.File类型有一个指针方法Fd,它在被调用之后将会返回一个uintptr 类型的值,这个值就代表了当前的File值所持有的那个文件描述符。

3.4 os.OpenFile

os.OpenFile其实是os.Openos.Create函数的底层支持,它最为灵活。

这个函数有3个参数:

操作模式限定了文件的方式,权限模式控制文件的访问权限。

四、os.File值的操作模式有哪些

针对File值的操作模式主要有:只读模式、只写模式和读写模式。

更多的操作模式:

多个操作模式是通过按位操作符|组合起来的。

func Create(name string) (*File, error) {return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666)}
func Open(name string) (*File, error) {return OpenFile(name, O_RDONLY, 0)}

五、os.OpenFile的第三个表示模式的参数

os.OpenFile函数的第三个参数perm代表的是权限模式,它的类型是os.FileMode。实际上,os.FileMode能够代表的不仅是权限模式,还可以代表文件模式(也可以称为文件种类)。

os.FileMode是基于uint32类型的再定义类型,包含23个比特位,在这23个比特位,每个比特位都有特定的含义。

os.FileMode只有最低9个比特位才用于表示文件的权限。

os.FileMode类型的值与os.ModePerm常量(值为0777)做按位与操作,得到的值就表示对应的权限模式。

这9个比特位,3个为一组,共3组。从高到低,分别表示:文件所有者(创建文件的那个用户)、文件所属的用户组、用户对该文件的访问权限。而对于每个组,其中的3个比特位从高到低分别表示:读权限、写权限、执行权限。

某个比特位上是1,表示相应的权限开启,否则,就表示相应的权限关闭。

但要注意,只有在新建文件的时候,这里的第三个参数值才是有效的。在其他情况下,即使我们设置了此参数,也不会对目标文件产生任何的影响。

到此,关于“GoLang OS包及File类型源码分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯