2-2linux系统IO
文章目录
- linux系统文件io
- 1 open /close
- 1.1 open
- 1.2 close
- 1.3 示例
- 1.3.1 打开已经存在的文件
- 2 read/write
- 2.1 read
- 2.2 write
- 使用
- 遗留问题:新创建的文件权限很奇怪
- 3 lseek
- 3.1 文件指针的移动
- 3.2 文件拓展
- perror函数
linux系统文件io
系统函数是系统专有的函数,不是内核函数,内核函数是不允许用户使用的,所以系统函数来做这个桥梁调用它
1 open /close
1.1 open
这里纠结了很久,想直接去看c++的文件io,但是没有必要,文件操作的open/close用c标准就行了,所以回过头来看了
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h># 打开已经存在的文件
int open(const char* pathname, int flags);
# 打开文件,如果不存在会自动创建
int open(const char* pathname, int flags, mode_t mode)
-
pathname:文件名
-
flags:使用什么方式打开
- O_RDONLY
- O_WRONLY
- O_RDWR
- O_APPEND:数据追加到尾部
- O_CREAT:如果文件不存在就创建文件
- O_EXCL:检查文件是否存在,必须和O_CREAT一起使用 O_CREAT|O_EXCL
- 文件不存在,创建文件
- 文件存在,创建失败,返回-1(如果不使用这个的话不会返回-1)
-
mode:在创建文件的时候指定权限,八进制整数,最大值为0777
- 还需要计算
-
返回值,打开成功返回文件描述符 打开失败返回-1
1.2 close
#include <unistd.h>
int close(int fd);
# fd就是open函数的返回值
1.3 示例
1.3.1 打开已经存在的文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <iostream>
#include <unistd.h>
int main()
{int fd = open("./new.txt",O_WRONLY);if (fd == -1){perror("open:");}else{std::cout << "fd :" << fd;}close(fd);return 0;
}
1.3.2 创建不存在的文件并打开
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <iostream>
#include <unistd.h>
int main()
{int fd = open("./add.txt",O_RDWR|O_CREAT|O_EXCL);if (fd == -1){perror("open:");std::cout << "file is exists." << std::endl;}else{std::cout << "fd :" << fd << std::endl;}close(fd);return 0;
}
假设在创建新文件的时候, 给 open 指定第三个参数指定新文件的操作权限, 文件也是会被创建出来的, 只不过新的文件的权限可能会有点奇怪, 这个权限会随机分配而且还会出现一些特殊的权限位, 如下:
$ $ ll new.txt
-r-x--s--T 1 robin robin 0 Jan 30 16:17 new.txt* # T 就是一个特殊权限
2 read/write
2.1 read
用于读取文件内部数据
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
-
buf 传出参数,只想一块有效内存
-
count buf指向的内存的大小,能存储的最大字节数
-
返回值
-
大于零:从文件中读取到的字节数
-
等于零:读取成功,但啥也没有
-
-1 :读取失败
2.2 write
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
使用
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <iostream>
#include <unistd.h>
#include <stdlib.h>
int main()
{int fd = open("./new.txt",O_RDWR);if (fd == -1){perror("open:");}else{std::cout << "fd :" << fd << std::endl;}int fd2 = open("./new2.txt",O_WRONLY|O_EXCL|O_CREAT, 0777);if (fd2 == -1){perror("open:");}else{std::cout << "fd2 :" << fd << std::endl;}char buf[1024];int len = -1;while ( (len = read(fd, buf, sizeof(buf))) > 0){int ret = write(fd2, buf, len);if (ret == -1){perror("write");}}close(fd);close(fd2);return 0;
}
遗留问题:新创建的文件权限很奇怪
如果创建新的文件,要添加mode参数,并指定权限
3 lseek
lseek函数是系统函数,可以移动文件指针,进行文件拓展
#include <sys/types.h>
#include <unistd.h>off_t lseek(int fd, off_t offset, int whence);- offset 偏移量- whence 指定函数实现什么功能- SEEK_SET:从头部开始偏移offset个字节- SEEK_CUR:从当前文件指针的位置向后偏移offset- SEEK_END:从文件尾部向后偏移offset返回值:- 成功:返回从头部开始计算总的偏移量- 失败: -1
3.1 文件指针的移动
# 指针移动到文件头部
lseek(fd, 0, SEEK_SET);# 查看当前指针的位置
lseek(fd, 0, SEEK_CUR);# 得到文件的大小
lseek(fd, 0, SEEK_END);
3.2 文件拓展
拓展文件以后需要立即写入随便什么东西
lseek(fd, 1000, SEEK_END);write(fd,"1", 1);
perror函数
#include <stdio.h>
void perror(const char *s)
实际使用的时候,当出现错误的时候会有对应的返回值,我们只知道返回值,至于它的错误是什么,可以调用perror自动输出,还可以添加提示信息s
if (flag == -1)
{perror("error1");close();
}
if (flag == "ss")
{perror("error2");break;
}
总之就是将函数报错的返回值翻译成错误并打印出来
相关文章:
2-2linux系统IO
文章目录 linux系统文件io1 open /close1.1 open1.2 close1.3 示例1.3.1 打开已经存在的文件 2 read/write2.1 read2.2 write使用 遗留问题:新创建的文件权限很奇怪3 lseek3.1 文件指针的移动3.2 文件拓展 perror函数 linux系统文件io 系统函数是系统专有的函数&am…...
周边游平台设计与实现(代码+数据库+LW)
摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对旅游信息管理的提升,…...
视频批量分段工具
参考原文:视频批量分段工具 选择视频文件 当您启动这款视频批量分段工具程序后,有两种便捷的方式来选择要处理的视频文件。其一,您可以点击程序界面中的 “文件” 菜单,在下拉选项里找到 “选择视频文件” 按钮并点击;…...
Android -- 使用Sharepreference保存List储存失败,原因是包含Bitmap,drawable等类型数据
1.报错信息如下: class android.content.res.ColorStateList declares multiple JSON fields named mChangingConfigurations 2.Bean类属性如下: data class AppInfoBean( val appName: String?, val appIcon: Drawable, val appPackage: String?,…...
java项目之基于ssm的图书馆书库管理系统(源码+文档)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的图书馆书库管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 该系统可以实现图书信息管理…...
编写一个程序,输入一个数字并输出其阶乘(Python版)
编写一个程序,输入一个数字并输出其阶乘 要计算一个数字的阶乘,可以编写一个简单的 Python 程序,使用循环或者递归来实现: 1. 使用 for 循环计算阶乘 # 输入一个数字 num int(input("请输入一个数字: "))# 初始化阶乘结果 facto…...
dify基础之prompts
摘要:在大型语言模型(LLM)应用中,Prompt(提示词)是连接用户意图与模型输出的核心工具。本文从概念、组成、设计原则到实践案例,系统讲解如何通过Prompt解锁LLM的潜能,提升生成内容的…...
实践教程:使用DeepSeek实现PDF转Word的高效方案
🎈Deepseek推荐工具 PDF文件因其跨平台、格式稳定的特性被广泛使用,但在内容编辑场景中,用户常需将PDF转换为可编辑的Word文档。传统的付费工具(如Adobe Acrobat)或在线转换平台存在成本高、隐私风险等问题。本文将使…...
网络安全审计员
在当今数字化时代,随着信息技术的迅猛发展,网络安全问题日益凸显,成为各行各业不容忽视的重要议题。特别是对于企业、政府机构等组织而言,网络安全不仅关乎数据资产的安全,更与组织的声誉、客户信任乃至法律法规的遵从…...
算法-二叉树篇13-路径总和
路径总和 力扣题目链接 题目描述 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回…...
如何设计一个短链系统?
短链系统设计的关键要点: 系统功能实现 短链生成:接收长链接,先检查是否已有对应短链,存在则直接返回。否则,使用分布式 ID 生成器(如号段模式、SnowFlake 算法、数据库自增 ID、Redis 自增等)生成唯一 ID,或通过哈希算法(如 MurmurHash)处理长链接得到哈希值。再将生…...
医疗行业电脑终端如何防病毒——火绒企业版杀毒软件
医疗物联网技术广泛应用,使得医院网络空间中增加了诸多新型终端设备。这些设备类型多样、型号各异,风险暴露面积大。火绒安全对医疗机构终端安全出现的问题、不足、需求等,提出整体解决方案。 医疗行业终端安全防护痛点 系统老旧 医院、区…...
云平台DeepSeek满血版:引领AI推理革新,开启智慧新时代
引言:人工智能的未来——云平台的卓越突破 在当今科技飞速发展的时代,人工智能(AI)技术正深刻地改变着我们生活与工作方式的方方面面。作为AI领域的创新者与领航者,云平台始终走在技术前沿,凭借无穷的热情…...
Java进阶——数据类型深入解析
Java数据类型深入解析 本文主要介绍 Java 数据类型的相关知识,包括8 种基本类型、默认值、字面量表示、自动装箱与拆箱、类型转换规则(隐式转换、强制转换)、浮点型精度问题、字符与字符串、引用类型比较与常量池、数值溢出与处理、类型推断等…...
R语言+AI提示词:贝叶斯广义线性混合效应模型GLMM生物学Meta分析
全文链接:https://tecdat.cn/?p40797 本文旨在帮助0基础或只有简单编程基础的研究学者,通过 AI 的提示词工程,使用 R 语言完成元分析,包括数据处理、模型构建、评估以及结果解读等步骤(点击文末“阅读原文”获取完整代…...
深度解析 ANSI X9.31 TR-31:金融行业密钥管理核心标准20250228
深度解析 ANSI X9.31 TR-31:金融行业密钥管理核心标准 在当今数字化金融时代,信息安全至关重要,而密钥管理则是保障金融数据安全的核心环节。ANSI X9.31 TR-31作为金融行业密钥管理的关键标准,为对称密钥的全生命周期管理提供了坚…...
视频字幕识别和翻译
下载的视频很多不是汉语的,我们需要用剪映将语音识别出来作为字幕压制到视频中去。 剪映6.0以后语音识别需要收费,但是低版本还是没有问题。 如果想要非汉语字幕转成中文,剪映低版本不提供这样功能。但是,用剪映导出识别字幕&am…...
Spring Boot 流式响应豆包大模型对话能力
当Spring Boot遇见豆包大模型:一场流式响应的"魔法吟唱"仪式 一、前言:关于流式响应的奇妙比喻 想象一下你正在火锅店点单,如果服务员必须等所有菜品都备齐才一次性端上来,你可能会饿得把菜单都啃了。而流式响应就像贴…...
算法之领域算法
领域算法 ♥一些领域算法知识体系♥ | Java 全栈知识体系...
【愚公系列】《Python网络爬虫从入门到精通》033-DataFrame的数据排序
标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...
Java多线程实现之Runnable接口深度解析
Java多线程实现之Runnable接口深度解析 一、Runnable接口概述1.1 接口定义1.2 与Thread类的关系1.3 使用Runnable接口的优势 二、Runnable接口的基本实现方式2.1 传统方式实现Runnable接口2.2 使用匿名内部类实现Runnable接口2.3 使用Lambda表达式实现Runnable接口 三、Runnabl…...
轻量安全的密码管理工具Vaultwarden
一、Vaultwarden概述 Vaultwarden主要作用是提供一个自托管的密码管理器服务。它是Bitwarden密码管理器的第三方轻量版,由国外开发者在Bitwarden的基础上,采用Rust语言重写而成。 (一)Vaultwarden镜像的作用及特点 轻量级与高性…...
