我的编程空间,编程开发者的网络收藏夹
学习永远不晚

GoLang OS包及File类型源码分析

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

GoLang OS包及File类型源码分析

这篇文章主要介绍“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包中三个最核心的简单接口:io.Readerio.Writerio.Closer

    • *os.File还实现了另外三个简单接口:io.ReaderAtio.Seekerio.WriterAt

    • 由于*os.File实现了上面六个简单接口,所以它顺便实现了io包中9个扩展接口中的7个:io.ReadWriterio.ReadCloserio.ReadSeekerio.ReadWriteCloserio.ReadWriteSeekerio.WriteCloserio.WriteSeeker

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

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

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

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

    3.1 os.Create

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

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

    • 如果在我们给予os.Create函数的路径之上,已经存在一个文件,那么该函数会清空现有文件中的全部内容,然后再把它作为第一个结果值返回;

    • 如果给定的路径的某一级父目录并不存在,该函数就会返回一个*os.PathError类型的错误值,以表示“不存在的文件或目录“。

    3.2 os.NewFile

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

    • 如果给定的文件描述符不是有效的,那么函数将返回nil。否则,它将会返回一个代表了相应文件的File值;

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

    3.3 os.Open

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

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

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

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

    3.4 os.OpenFile

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

    这个函数有3个参数:

    • name:文件路径;

    • flag:需要施加在文件描述符之上的模式;比如,只读模式(由os.O_RDONLY)。操作模式

    • perm:代表的也是模式,类型是os.FileMode,是一个基于uint32类型的再定义类型。权限模式。

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

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

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

    • 只读模式:os.O_RDONLY

    • 只写模式:os.O_WRONLY

    • 读写模式:os.O_RDWR

    更多的操作模式:

    • os.O_APPEDN :写内容是,追加在现有内容的后面;

    • os.O_CREATE :当给定路径上的文件不存在时,创建一个新文件;

    • os.O_EXCL:需要和os.O_CREATE一同使用,表示给定的路径上不能有存在的文件。

    • os.O_SYNC :在打开文件之上实施同步I/O。它会保证读写的内容总会与硬盘上的数据保持同步。

    • os.O_TRUNC:如果文件已存在,并且是常规的文件,那么就先清空其中已存在的任何内容。

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

    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个比特位,每个比特位都有特定的含义。

    • 如果在最高比特位的二进制数是1,该文件模式就等同于os.ModeDir,也就是说相应的文件是一个目录。

    • 如果在第26位比特位的二进制数是1,该文件模式就等同于os.ModeNamedPipe,也就是说该文件是一个命名管道。

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

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

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

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

    • 八进制整数0777就表示:操作系统中的所有用户都对当前的文件有读、写和执行的权限;

    • 而八进制整数0666则表示:所有用户都对当前文件有读和写的权限,但都没有执行的权限。

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

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

    免责声明:

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

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

    GoLang OS包及File类型源码分析

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    GoLang OS包及File类型源码分析

    这篇文章主要介绍“GoLang OS包及File类型源码分析”,在日常操作中,相信很多人在GoLang OS包及File类型源码分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”GoLang OS包及File
    2023-07-05

    Python内建类型dict源码分析

    本篇内容主要讲解“Python内建类型dict源码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python内建类型dict源码分析”吧!深入认识Python内建类型—&mdas
    2023-07-05

    Golang内存模型实例源码分析

    这篇文章主要介绍“Golang内存模型实例源码分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Golang内存模型实例源码分析”文章能帮助大家解决问题。1. 简介(Introduction)Go
    2023-07-05

    Python内建类型float源码分析

    这篇文章主要介绍“Python内建类型float源码分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python内建类型float源码分析”文章能帮助大家解决问题。1 回顾float的基础知识1.
    2023-06-30

    Python内建类型int源码分析

    今天小编给大家分享一下Python内建类型int源码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。问题:对于C语言,下面
    2023-06-30

    Python内建类型str源码分析

    这篇文章主要讲解了“Python内建类型str源码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python内建类型str源码分析”吧!1 Unicode计算机存储的基本单位是字节,由8
    2023-06-30

    Golang数据类型实例代码比较分析

    这篇文章主要讲解了“Golang数据类型实例代码比较分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang数据类型实例代码比较分析”吧!分类说明是否能比较说明基本类型整型( int/
    2023-07-06

    go语言字符类型byte与rune源码分析

    这篇文章主要介绍“go语言字符类型byte与rune源码分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“go语言字符类型byte与rune源码分析”文章能帮助大家解决问题。一、byte类型介绍by
    2023-07-05

    python中函数的返回值及类型实例代码分析

    这篇“python中函数的返回值及类型实例代码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python中函数的返回值及
    2023-07-05

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录