非零基础自学Golang 第11章 文件操作 11.2 文件基本操作 11.2.1 文件创建与打开

news2024/11/17 16:27:02

非零基础自学Golang

文章目录

      • 非零基础自学Golang
      • 第11章 文件操作
        • 11.2 文件基本操作
          • 11.2.1 文件创建与打开

第11章 文件操作

11.2 文件基本操作

在学习文件操作之前,我们先来了解一下Linux下的文件权限。

文件有三种权限,分别为读取、写入和执行,对应字母为r、w、x。

Linux下权限的粒度有拥有者、所属组、其他组三种。

每个文件都可以针对三种粒度,设置不同的rwx(读、写、执行)权限。通常情况下,一个文件只能归属于一个用户和组,如果其他的用户想拥有这个文件的权限,则可以将该用户加入具备权限的群组,一个用户可以同时归属于多个组。

在这里插入图片描述

在创建一个文件或文件夹时,我们通常会赋予这个文件一定的权限。例如777权限就代表给这个文件的拥有者、所属组、其他用户赋予的读写执行权限。【OK】

11.2.1 文件创建与打开

对于文件的创建与打开,使用的是标准库os中的OpenFile。

func OpenFile(name string, flag int, perm FileMode) (file *File, err error)

OpenFile是一个更底层的文件打开函数,大多数调用者都应用Open或Create代替本函数。

它会使用指定的选项(如O_RDONLY等)、指定的模式(如0666等)打开指定名称的文件。如果操作成功,返回的文件对象可用于I/O。如果出错,错误底层类型是*PathError。

位掩码参数flag用于指定文件的访问模式,可用的值在os中定义为常量(以下值并非所有操作系统都可用):

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 // 如果可能,打开时清空文件
)

其中,O_RDONLY、O_WRONLY、O_RDWR应该只指定一个,剩下的通过“|”操作符来指定。该函数内部会给flags加上syscall.O_CLOEXEC,在fork子进程时会关闭通过OpenFile打开的文件,即子进程不会重用该文件描述符。

【提示】

由于历史原因,O_RDONLY | O_WRONLY并非等于O_RDWR,它们的值一般是0、1、2。

位掩码参数perm指定了文件的模式和权限位,类型是os.FileMode,文件模式位常量定义在os中:

const (
 	// 单字符是被 String 方法用于格式化的属性缩写
 	ModeDir FileMode = 1 << (32 - 1 - iota) // d: 目录
 	ModeAppend // a: 只能写入,且只能写入到末尾
 	ModeExclusive // l: 用于执行
 	ModeTemporary // T: 临时文件(非备份文件)
 	ModeSymlink // L: 符号链接(不是快捷方式文件)
 	ModeDevice // D: 设备
 	ModeNamedPipe // p: 命名管道(FIFO)
 	ModeSocket // S: Unix域socket
 	ModeSetuid // u: 表示文件具有其创建者用户id权限
 	ModeSetgid // g: 表示文件具有其创建者组id的权限
 	ModeCharDevice // c: 字符设备,需已设置ModeDevice
 	ModeSticky // t: 只有root/创建者能删除/移动文件
 
 	// 覆盖所有类型位(用于通过&获取类型位),对普通文件,所有这些位都不应被设置
 	ModeType = ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | ModeDevice
 	ModePerm FileMode = 0777 // 覆盖所有Unix权限位(用于通过&获取类型位)
)

以上常量在所有操作系统都有相同的含义,因此文件的信息可以在不同的操作系统之间安全地移植。

[ 动手写 11.2.1]

package main

import (
   "fmt"
   "os"
)

func main() {

   // 以读写方式打开文件,如果不存在,则创建
   file, err := os.OpenFile("C:\\Windows\\Temp\\1.txt", os.O_RDWR|os.O_CREATE, 0766)

   if err != nil {
      fmt.Println(err)
   }
   fmt.Println(file)
   file.Close()
}

运行结果

在这里插入图片描述

动手写11.2.1中,“os.O_RDWR|os.O_CREATE”表示以读写方式打开文件,如果文件不存在,则创建这个文件。

大多数情况下,我们会使用如下两个函数来创建或打开文件。

func Open(name string) (file *File, err error)

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

func Create(name string) (file *File, err error)

Create采用模式0666(任何人都可读写,不可执行)创建一个名为name的文件,如果文件已存在就会截断它(为空文件)。如果成功,返回的文件对象可用于I/O;对应的文件描述符具有O_RDWR模式。如果出错,错误底层类型是*PathError。

Open和Create的函数定义如下:

func Open(name string) (*File, error) {
 	return OpenFile(name, O_RDONLY, 0)
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/97861.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设计模式2 - 创建型模式

23种设计模式分析与见解开篇、UML、软件设计原则https://blog.csdn.net/lili40342/article/details/128358435创建型模式https://blog.csdn.net/lili40342/article/details/128358392结构型模式https://blog.csdn.net/lili40342/article/details/128358313行为型模式https://bl…

【MATLAB100个实用小技巧】——图形处理(67-75)

文章目录前言系列文章67. 图像的块操作68. 图形的过滤操作69. 图像的频率操作70. 函数变换71. RADON 函数变换72. 图像分析&#xff08;1&#xff09;73. 过滤图像74. 图像的区域处理75. 图像的颜色处置前言 &#x1f30f;MATLAB是一个功能强大的软件&#xff0c;我们可以利用M…

Mycat(3):mycat的安装

1、前言 使用mycat要安装JDK.不会的去看Linux里面的安装JDK的知识点&#xff0c;这是不再做说明 也可以直接使用yum install java-1.7.0-openjdk 因为mycat 基于jdk1.7开发的&#xff0c;所有最好安装jdk1.7的版本 重要说明&#xff1a; Mycat-server-1.6-release 版本发布的版…

手机技巧:苹果手机这8个实用小技巧

今天给大家大家分享苹果手机8个实用小技巧&#xff0c;你都会用吗&#xff1f; 1、快速搜索相机照片 相信大家的相册里的照片应该和我一样不说有几千张&#xff0c;几百张总是有的&#xff0c;有时候想找照片&#xff0c;又不想一张一张找怎么办&#xff1f;很简单&#xff0c…

Docker配置从私有仓库拉取镜像

修改Docker配置文件 修改docker的配置文件daemon.json&#xff0c;如果配置文件不存在则直接创建。 vim /etc/docker/daemon.json文件内容如下&#xff0c;其中insecure-registries属性值“registry.luntek-inc.com”代表私有仓库的地址&#xff0c;你需要将registry.luntek-…

JavaSE13-方法

目录 1.方法的基本用法 1.1.什么是方法 1.2.方法定义语法 1.3.方法调用的执行过程 1.4.实参和形参的关系 1.5.方法的返回值 2.方法重载 2.1.方法重载定义 2.2.代码示例 3.方法递归 3.1.方法递归定义 3.2.方法递归使用条件 3.3.递归与非递归优劣比较 3.4.递归执行…

[附源码]Nodejs计算机毕业设计基于网络C++实验管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

SpringBoot+Vue项目部门人事管理系统的设计与实现

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

Vit 中的 Token 改进版本:Token Mreging: Your Vit But Faster 论文阅读笔记

Vit 中的 Token 改进版本&#xff1a;Token Mreging: Your Vit But Faster 论文阅读笔记一、Abstract二、引言三、相关工作3.1 有效的 Transformer3.2 Token 的减少3.3 Token 的联合四、Token 融合4.1 策略4.2 Token 相似性4.3 双边软匹配4.4 追踪 Token 的尺寸4.5 采用融合操作…

[附源码]计算机毕业设计Python餐馆点餐管理系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

非零基础自学Golang 第11章 文件操作 11.3 处理JSON文件 11.3.2 解码JSON 11.4 小结

非零基础自学Golang 文章目录非零基础自学Golang第11章 文件操作11.3 处理JSON文件11.3.2 解码JSON11.4 小结第11章 文件操作 11.3 处理JSON文件 11.3.2 解码JSON 解码JSON会使用到Unmarshal接口&#xff0c;也就是Marshal的反操作。 func Unmarshal(data []byte, v interf…

30岁零基础没学历学Python怎么样?30岁学习Python晚吗?

30岁零基础没学历学Python怎么样&#xff1f;30岁学习Python晚吗&#xff1f;任何时候开始都不晚。30岁开始学习Python听起来年纪有点大&#xff0c;大家认为编程上了年纪学习编程语言是一个劣势。想在三十岁的时候通过学习Python来谋求一份IT程序员工作&#xff0c;则需要有一…

SQL笔记

SQL笔记 基本概述 数据库&#xff1a;保存有组织的数据的容器&#xff08;通常是一个文件或一组文件&#xff09;。容易混淆&#xff1a;人们通常用数据库这个术语来代表他们使用的数据库软件&#xff0c;这是不正确的&#xff0c;也因此产生了许多混淆。确切地说&#xff0c…

抖音关键词排名优化技巧,手把手教你怎样优化抖音关键词

云南百收科技有限公司 1、标题中出现关键词是关键词排名靠前的基础。 一篇文章中标题中一定要出现你想做的关键词&#xff0c;因为搜索引擎是是匹配标题的&#xff0c;如果你标题中没有关键词&#xff0c;是不会有排名的。而且还有一点&#xff0c;关键词的位置要靠近标题最前面…

python+pyqt5+mysql设计图书管理系统(1)- 数据库

一、概述 前面学习了python,pyqt和mysql的一些基础知识,接下来运用学习的东西进行实操制作一个项目--图书管理系统。 项目介绍:图书管理系统对于我们的图书管理来说非常重要,管理图书者可以通过系统有效的管理书籍,用户可以通过系统快速有效的找到自己需要的书籍。相比人工…

【目标跟踪】Kalman滤波目标跟踪【含Matlab源码 388期】

⛄一、获取代码方式 获取代码方式1&#xff1a; 通过订阅紫极神光博客付费专栏&#xff0c;凭支付凭证&#xff0c;私信博主&#xff0c;可获得此代码。 获取代码方式2&#xff1a; 完整代码已上传我的资源&#xff1a;【目标跟踪】基于matlab Kalman滤波目标跟踪【含Matlab源…

聊一聊Unity的Test Framework应该怎么用

其实 Unity 很早就出了这个包&#xff0c;不过感觉基本上没什么人用&#xff0c;这么好的东西&#xff0c;本着让所有人都能了解的态度&#xff0c;今天就来聊聊它应该怎么使用。 第1步先安装它&#xff0c;或者给它升级到最新。 第2步打开工具的主窗口 支持分别在 PlayMode 或…

unity 2022大三期末大作业 3D立体魔方游戏(附下载链接)

unity 2022大三期末大作业 3D立体魔方游戏 这是本人的一个unity期末大作业&#xff0c;实现比较简单&#xff0c;unity版本是2018 的&#xff0c;导入即可运行无错误 下载链接 游戏可以一键打乱魔方的顺序&#xff0c;也可以一键还原等等功能&#xff0c;实现了魔方的使用功能…

手把手教你,从零开始搭建Spring Cloud Alibaba这份笔记太牛了

Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案&#xff0c;是阿里巴巴开源中间件与 Spring Cloud 体系的融合。 Springcloud 和 Srpingcloud Alibaba 区别&#xff1f; SpringCloud&#xff1a; 部分组件停止维护和更新&#xff0c;给开发带来不便;SpringCl…

[附源码]Nodejs计算机毕业设计基于推荐算法的鞋服代购平台Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…