当前位置: 首页 > news >正文

【进程OI】基本文件操作的系统调用

文章目录

  • 前言
  • open
    • 参数flags
    • 参数mode
  • write
  • read
  • close

前言

当用户想要向磁盘中的文件读写数据,就必须要得到操作系统的允许。同样,操作系统为了能让用户去对文件进行打开、读写、关闭等操作,向上提供了相应的系统调用的接口。C、JAVA、C++等语言它们对这些系统调用进行了封装,虽然各个函数看起来不一样,但是本质是都是在使用操作系统提供的系统调用。
接下来,我们来介绍这些系统调用的接口。

open

用于打开一个文件,并返回一个文件描述符。open()系统调用可以指定文件名、访问模式(读、写、追加等)以及权限等参数。

在这里插入图片描述

open函数可以以flag的方式打开某个文件,如果文件不存在,就会创建一个新的文件。
pathname表示文件的路径名,也可以是一个文件名,这样会默认在当前进程路径下打开或者创建。
flags表示打开文件的方式选项,参见选项有:
O_WRONLY:只写打开
O_CREAT:文件不存在时创建文件
O_RDONLY:只读打开
O_RDWR:读写方打开
O_APPEND:追加方式打开
O_TRUNC:清空文件,重新写入
参数mode表示的是创建文件时的初始化权限编码(会被umask影响)。

参数flags

参数flags可以允许选项多个组合搭配。例如O_WRONLY|O_CREAT|O_TRUNC表示的就是:以写的方式打开,如果之前文件不存在,则创建文件,并且打开文件后清空文件中的所有内容。相当于C语言中的w文件操作。

为什么这些选项用或|起来就能实现组合呢?

参数int flags表示的实际上是一个32位二进制的位图,位图(Bitmap)是一种基于位操作的数据结构,用于表示一组元素的集合信息。位图中的每个二进制位都表示着某个元素是否在集合中。当然实际上可能不会用到这么多位。

比如宏O_WRONLY假设表示的是2即10(二进制),O_CREAT表示4,即100(二进制)。那么O_WDONLY|O_CREAT=110(二进制)。在open函数内部就会有相应的机制监测flags的二进制位哪些是1,再分别对应其代表的功能。

参数mode

mode参数表示的是四个八进制位的数,一般取后三位表示文件的权限.例如0666,取666用二进制表示的就是110 110 110分别对应文件的拥有者、所属组、其他人的权限。

如果没有设置mode,那么创建出来的文件权限可能就会出现问题。

例如我们用以下代码创建一个原本不存在的文件
在这里插入图片描述

在这里插入图片描述
结果文件权限都出现了乱码。
所以一般我们要创建新文件的时候,都需要带上mode参数。

于是我们删掉log.txt文件,再加上参数mode:
在这里插入图片描述
在这里插入图片描述
mode=0666。新建出来的文件权限就变成了rw-rw-r--对应的权限编码为664.这是因为我们的umask默认为002,也就是过滤掉了“其他人”的w权限,所以得到的最终文件权限编码是664
对文件权限部分不太理解的同学可以去看我之前的博客
超详细讲解linux的文件权限及操作

write

用于向文件中写入数据。通过指定文件描述符、数据来源的缓冲区地址和要写入的字节数,可以将数据写入到文件中。如果写入失败则返回-1,否则返回写入的字节数;
在这里插入图片描述

fd表示的是文件标识符
buf表示的是数据的地址
count表示的是字节数
ssize_t类型表示有符号整型,输出格式为%ud.
在这里插入图片描述
在这里插入图片描述

read

用于从文件中读取数据。通过指定文件描述符、缓冲区地址和读取的字节数,可以将文件中的数据读取到缓冲区中。读取成功返回读取的字节数,否则返回-1.
在这里插入图片描述

fd表示文件标识符
buf表示数据从文件中输出到的地址
count期望要读取的字节数

close

用于关闭一个文件描述符,释放系统资源。在文件操作完成后,应该及时关闭文件描述符,以防资源泄漏。关闭成功返回0,否则返回-1.
在这里插入图片描述

相关文章:

【进程OI】基本文件操作的系统调用

文章目录 前言open参数flags参数mode writereadclose 前言 当用户想要向磁盘中的文件读写数据,就必须要得到操作系统的允许。同样,操作系统为了能让用户去对文件进行打开、读写、关闭等操作,向上提供了相应的系统调用的接口。C、JAVA、C等语…...

Ubuntu20.04 server系统部署安装(VMware上)和初始化配置

Ubuntu20.04 server部署安装(VMware上)和初始化配置 一、Ubuntu20.04 server系统部署安装上下键控制上下,可以选择配置的目标,回车表示确定,并进行下一步1.1镜像下载2.1 VMware上创建虚拟机2.2 选择语言,键…...

图论最短路径以及floyd算法的MATLAB实现

图论是数学的一个分支,起源于18世纪。1736年,数学家欧拉通过解决“哥尼斯堡七桥问题”,将问题抽象成点和线的关系,并通过理论分析得出结论,这个过程标志着图论的产生,欧拉也因此被称为“图论之父”。图论研…...

微信小程序 - 登录功能实现

一、认证流程 1. 小程序调用wx.login获取登录认证需要的code,并请求开发者服务器。 2. 开发者服务器根据code,appid, appsecret请求微信接口t获取 openid与session_key ,并生成自己的认证token,并返回给小程序。 3.小程序请求开…...

Python连接MySQL

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、整体思路二、连接流程三、表结构及代码实现 一、整体思路 二、连接流程 三、表结构及代码实现 代码块如下: import pymysqlcon pymysql.connect(h…...

水泊梁山108小酒坛之呼保义宋江

宋江【绰号呼保义、及时雨】字公明,是古典名著《水浒传》中的角色。原为山东郓城县押司,他和晁盖互通往来的事被阎婆惜发现,因此怒杀阎婆惜,逃回家隐藏。后前往清风寨投靠花荣,却被清风寨观灯时遭知寨刘高之妻陷害入狱…...

java.lang.ClassNotFoundException: javafx.application.Application

java8(jdk1.8)到java10(jdk10)中内含有JavaFx 在java11(jdk11)以及以后的版本中剥离出来需要开发者独立下载,另行导入download https://gluonhq.com/products/javafx/java --module-path $FX-P…...

腾讯 tendis 替代 redis linux安装使用

下载地址 Tendis存储版 点击下载 linux 解压 tar -zxvf 安装包.tgz cd 解压安装包/scripts 启动 ./start.sh 停止 ./stop.sh 详细配置 修改 /scripts tendisplus.conf # tendisplus configuration for testing # 绑定本机IIP bind 192.168.31.112 port 51002 #设…...

k8s调优--来自gpt

Kubernetes(K8s)性能调优是一个涉及多个方面的过程,旨在提高集群的效率和响应速度。这包括对节点、Pod、服务、网络和存储等多个层面进行调优。下面我将概述一些常见的Kubernetes性能调优方法: 节点级别的调优: 1.资源分配&…...

HTML5+CSS3小实例:旋转中的视差效果

实例:旋转中的视差效果 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scal…...

3-zookeeper之ZAB协议

Zookeeper ZAB协议 概述 ZAB(Zookeeper Automic Broadcast)是一套专门为Zookeeper设计的用于进行原子广播和崩溃恢复的协议ZAB协议主要包含了两个功能 原子广播&#xff1a;保证数据一致性崩溃恢复&#xff1a;保证集群的高可用 ZAB协议本身是基于2PC算法来进行的设计&#…...

如何为企业策划一场XR虚拟直播?

活动年年办&#xff0c;都是老一套&#xff0c;想玩点新花样&#xff1f; 预算有限&#xff0c;但还是想把活动办的逼格高一点&#xff1f; 想通过活动&#xff0c;让更多的人知道自己企业的品牌&#xff1f; 随着AIGC技术的不断演变&#xff0c;企业活动的形式和内容也在不…...

6.3物联网RK3399项目开发实录-驱动开发之I2C 使用(wulianjishu666)

物联网开发源码案例集&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1kfPDpYZpm_G0GBLAup3KTQ?pwdvgvv I2C 使用 简介 AIO-3399J 开发板上有 9 个片上 I2C 控制器&#xff0c;各个 I2C 的使用情况如下表&#xff1a; 本文主要描述如何在该开发板上配置 I2C。 配置…...

HarmonyOS实战开发-如何构建多种样式弹窗

介绍 本篇Codelab将介绍如何使用弹窗功能&#xff0c;实现四种类型弹窗。分别是&#xff1a;警告弹窗、自定义弹窗、日期滑动选择器弹窗、文本滑动选择器弹窗。需要完成以下功能&#xff1a; 点击左上角返回按钮展示警告弹窗。点击出生日期展示日期滑动选择器弹窗。点击性别展…...

《Effective C++》《构造/析构/赋值运算——7、为多态基类声明virtual析构函数》

文章目录 1、term7:Declare destructors virtual in polymorphic base classes2、总结3、相关面试题3.1 析构函数在什么情况下声明为虚函数 4、参考 1、term7:Declare destructors virtual in polymorphic base classes 带有多态性质的基类应该声明一个virtual析构函数&#x…...

Type-C一分二快充线智能分配方案

随着移动设备的普及和快充技术的迅猛发展&#xff0c;Type-C接口已成为众多手机、平板和笔记本电脑的标配。然而&#xff0c;在日常使用中&#xff0c;我们经常会遇到需要同时为多个设备充电的情况。这时&#xff0c;Type-C一分二快充线就显得尤为重要。为了更好地满足用户的充…...

利用python脚本,根据词条爬取百度图片(爬虫)

把广角&#xff0c;换成你的关键词就行 # -*- coding: utf-8 -*- """ Created on Wed Mar 29 10:17:50 2023 author: MatpyMaster """ import requests import os import redef get_images_from_baidu(keyword, page_num, save_dir):header {Us…...

java复原IP 地址(力扣Leetcode93)

复原IP 地址 力扣原题链接 问题描述 有效 IP 地址正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’ 分隔。 例如&#xff1a;“0.1.2.201” 和 “192.168.1.1” 是有效 IP 地址&#xff0c…...

k8s的创建资源的流程图

背景 在k8s中创建资源需要经过几个流程的协作&#xff0c;包括认证模块&#xff0c;授权模块和资源管理模块的共同处理的结果 k8s的创建资源的流程图 第一步认证模块&#xff1a; k8s需要确保操作的客户端是合法的用户&#xff0c;并且不是仿冒的&#xff0c;也就是判断这个u…...

Android RecyclerView 滑动后选中的条目居中显示

话不多说先看效果: 实录效果视频如下 滚动居中 RecyclerView 在原有的RecyclerView 基础上操作&#xff0c;其他步骤不变&#xff0c;只是替换一下 manager 步骤 导入依赖 maven { url https://www.jitpack.io }//无限滚动implementation com.github.ZhaoChanghu:GalleryLayou…...

RPA-财务对账邮件应用自动化(客户对账机器人)

《财务对账邮件应用自动化》&#xff0c;将会使用邮箱的SMTP服务&#xff0c;小北把资源包绑定在这篇博客了 Uibot (RPA设计软件)———机器人的小项目友友们可以参考小北的课前材料五博客~ (本博客中会有部分课程ppt截屏,如有侵权请及请及时与小北我取得联系~&#xff09; …...

Delphi模式编程

文章目录 Delphi模式编程涉及以下几个关键方面&#xff1a;**设计模式的应用****Delphi特性的利用****实际开发中的实践** Delphi模式编程的实例 Delphi模式编程是指在使用Delphi这一集成开发环境&#xff08;IDE&#xff09;和Object Pascal语言进行软件开发时&#xff0c;采用…...

flutter 自定义弹窗封装弹窗----在弹窗内实现部分窗体生命周期

小部件组件 可以在里面加装其他事件如HTTP接口访问 import package:flutter/material.dart;///执行弹窗动画封装 class ExecutionDialog extends StatefulWidget {// final String? title;// final String? message;// final Function? onExecute;//// const ExecutionDial…...

go语言 私用仓库包下载

设置私有仓库&#xff0c;这样访问的时候&#xff0c;url前缀就不加proxy和sumdb go env -w GOPRIVATE"code.xxx.cn" go env -w GONOPROXY"code.xxx.cn" go env -w GONOSUMDB"code.xxx.cn" 设置取消安全认证 go env -w GOINSECURE"code…...

Math类

java.lang.Math 提供了一系列静态方法用于科学计算&#xff0c;常用方法如下&#xff1a; abs 绝对值 acos&#xff0c;asin&#xff0c;atan&#xff0c;cos&#xff0c;sin&#xff0c;tan 三角函数 sqrt 平方根 pow(double a,double b) a的b次幂 max(double a,double b) 取大…...

Git 入门教程

Git 入门教程 一、Git 是什么&#xff1f; Git 是一个开源的分布式版本控制系统&#xff0c;用于追踪代码的改动。它可以帮助开发者协同工作&#xff0c;管理项目中的代码版本。 二、安装 Git 在开始使用 Git 之前&#xff0c;你需要在你的计算机上安装 Git。你可以从 Git …...

Linux网络配置(超详细)

Linux网络配置大全 Linux网络配置一.网络地址配置网络地址查看–ifconfig使用网络配置命令设置网络接口参数-ifconfig禁用(临时)或者重新激活网卡设置虚拟网络接口 修改网络配置文件网络接口配置文件 IP命令详解OPTIONS选项OBJECT对象 ip link 二、获取和修改主机名hostname查看…...

[自研开源] 数据集成之分批传输 v0.7

开源地址&#xff1a;gitee | github 详细介绍&#xff1a;MyData 基于 Web API 的数据集成平台 部署文档&#xff1a;用 Docker 部署 MyData 使用手册&#xff1a;MyData 使用手册 试用体验&#xff1a;https://demo.mydata.work 交流Q群&#xff1a;430089673 介绍 本篇基于…...

用 AI 编程-释放ChatGPT的力量

最近读了本书&#xff0c;是 Sean A Williams 写的&#xff0c;感觉上还是相当不错的。一本薄薄的英文书&#xff0c;还真是写的相当好。如果你想看&#xff0c;还找不到&#xff0c;可以考虑私信我吧。 ChatGPT for Coders Unlock the Power of AI with ChatGPT: A Comprehens…...

【快速解决】解决谷歌自动更新的问题,禁止谷歌自动更新,如何防止chrome自动升级 chrome浏览器禁止自动升级设置方法

目录 问题描述 解决方法 1、搜索栏搜索控制面板 2、搜索&#xff1a;服务 ​编辑 3、点击Windows工具 4、点击服务 ​5、禁止谷歌更新 问题描述 由于我现在需要装一个谷歌的驱动系统&#xff0c;但是目前的谷歌驱动系统的版本都太旧了&#xff0c;谷歌自身的版本又太新了…...

日本真人做爰无遮挡视频免费网站/关键词优化排名哪家好

我认为这是一套适合初学者由浅到深的文章&#xff0c;所以强烈推荐给大家&#xff0c;作者从基础讲到最近比较火的漏洞&#xff0c;可能有些人看来是浅了些&#xff0c;但是的确很适合想干点啥但又不知道怎么办的菜鸟们 。 第一节&#xff0c;伸展运动。这节操我们要准备道具&a…...

wordpress 发布脚本/给公司做网站要多少钱

Mitchell J. Feigenbaum洛克菲勒大学数学物理实验室 Toyota 教授美国纽约获奖原因&#xff1a;混沌理论和非线性领域的先驱&#xff0c;发现了费根鲍姆常数Rashid A. Sunyaev1982-2002 年担任莫斯科俄罗斯科学院空间研究所高能天体物理系主任&#xff0c;并于 1992 年开始担任首…...

规范门户网站的建设和管理办法/市场推广方案ppt

Explain 命令中的 type 列&#xff0c;显示MySQL查询所使用的 关联类型(Join Types) 或者 访问类型&#xff0c;它表明 MySQL决定如何查找表中符合条件的行。常见访问类型性能由最差到最优依次为&#xff1a;ALL < index < range < index_subquery < unique_subque…...

abc网站建设/seo工作流程图

CVE漏洞爬虫java代码依赖-TestNGTestNG是Java中的一个测试框架,而该CVE漏洞爬虫示例中所涉及到的java代码中, \Crawler\src\com\***\ThreaderRun.java文件在导入import org.t ...Android&plus;clipse导入工程提示&colon;invalid project description今天遇到一个奇怪的…...

网站设计需要用到什么技术/镇江网站建设推广

备份数据库&#xff1a;mysqldump -u用户名 -p密码 数据库 > /Dir/sql.bak 备份表&#xff1a;mysqldump -u用户名 -p密码 数据库 表 > /Dir/biao.bak 备份字段&#xff1a; select * from admin > /Dir/ziduan.txt 备份网站: Rar a wangzhan.rar /打包目录/ 转载于:…...

番禺网站建设哪里好/短网址

前言 本文主要是讲解在Controller中的开发&#xff0c;主要的知识点有如下&#xff1a; 编码过滤器使用注解开发注解RequestMapping详解业务方法接收参数字符串转日期重定向和转发返回JSONSpringMVC过滤编码器 在SpringMVC的控制器中&#xff0c;如果没有对编码进行任何的操作&…...