Day31文件IO

news/发布时间2024/5/17 16:28:37

文章目录

  • 1.什么是文件IO
    • 1.1 概念
    • 1.2 特点
    • 1.3 操作
  • 2.函数接口
    • 2.1 打开文件 open()
    • 2.2 关闭文件
    • 2.3 读写文件
      • 2.3.1 读文件
      • 2.3.2 写文件
    • 2.4 文件的定位操作
  • 标准IO和文件IO总结

1.什么是文件IO

1.1 概念

又称系统IO,是系统调用,是操作系统提供的接口函数。
posix中定义的一组用于输入输出的函数
POSIX接口 (英语:Portable Operating System Interface)可移植操作系统接口

在这里插入图片描述

1.2 特点

(1)没有缓存机制,每次调用都会引起系统调用。
(2)围绕文件描述符进行操作,非负整数(>=0),依次分配
(3)文件IO默认打开三个文件描述符,分别是0(标准输入),1(标准输出),2(标准错误)
(4)操作任意类型的文件b c - l s p (除了d目录文件)

1.3 操作

打开文件: open
关闭文件:close
读写操作:read、write
定位操作: lseek

2.函数接口

2.1 打开文件 open()

int open(const char *pathname, int flags);
功能:打开文件
参数:pathname:文件路径名flags:打开文件的方式O_RDONLY:只读O_WRONLY:只写O_RDWR:可读可写O_CREAT:不存在创建O_TRUNC:存在清空O_APPEND:追加   
返回值:成功:文件描述符失败:-1当第二个参数中有O_CREAT选项时,需要给open函数传递第三个参数,指定创建文件的权限 int open(const char *pathname, int flags, mode_t mode);
最后权限=创建出来的文件指定权限值&(~umask)  
例如:指定权限为06668进制)
最终权限为:0666 & (~umask) = 0666&0775 = 0664

例子

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main(int argc, char const *argv[])
{int fd;//fd = open("a.c",O_WRONLY|O_CREAT|O_TRUNC,0666);fd = open("b.c",O_RDONLY);if(fd < 0){perror("open err");return -1;}printf("fd:%d\n",fd);return 0;
}

在这里插入图片描述

标准IO文件IO
rO_RDONLY 只读
r+O_RDWR 可读可写
wO_WRONLY|O_CREAT|O_TRUNC,0666 只写,不存在创建,存在清空
w+O_RDWR|O_CREAT|O_TRUNC,0666 可读可写,不存在创建,存在清空
aO_WRONLY|O_CREAT|O_APPEND,0666 只写,不存在创建,存在追加
a+O_RDWR|O_CREAT|O_APPEND,0666可读可写,不能存在创建,存在追加

注意:O_CREAT 需要加权限

2.2 关闭文件

int close(int fd);
功能:关闭文件
参数:fd:文件描述符

2.3 读写文件

2.3.1 读文件

ssize_t read(int fd, void *buf, size_t count);
功能:从一个已打开的可读文件中读取数据
参数: fd  文件描述符buf  存放位置count  期望的个数
返回值:成功:实际读到的个数(小于期望值说明实际没这么多)返回0:表示读到文件结尾返回-1:表示出错,并设置errno号

fgetc -> EOF 失败或末尾
fgets -> NULL 失败或末尾
fread -> 0 失败或末尾
read -> -1失败 0末尾

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>int main(int argc, char const *argv[])
{int fd;char buf[32]="";fd = open("a.c", O_RDONLY);if (fd < 0){perror("open err");return -1;}printf("fd:%d\n", fd);read(fd,buf,10);    //向fd文件中读取10个字符printf("buf: %s\n",buf);close(fd);return 0;
}

2.3.2 写文件

ssize_t write(int fd, const void *buf, size_t count);
功能:向指定文件描述符中,写入 count个字节的数据。
参数:fd   文件描述符buf   要写的内容count  期望写入字节数
返回值:成功:实际写入数据的个数失败  : -1

例子

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>int main(int argc, char const *argv[])
{int fd;char buf[32]="hello";fd = open("a.c", O_RDWR|O_CREAT|O_TRUNC,0666);if (fd < 0){perror("open err");return -1;}printf("fd:%d\n", fd);write(fd,buf,5);write(fd,"haha",10);close(fd);return 0;
}

在这里插入图片描述

2.4 文件的定位操作

off_t lseek(int fd, off_t offset, int whence);
功能:设定文件的偏移位置
参数:fd:文件描述符offset: 偏移量  正数:向文件结尾位置移动负数:向文件开始位置whence: 相对位置SEEK_SET   开始位置SEEK_CUR   当前位置SEEK_END   结尾位置
补充:和fseek一样其中SEEK_SET,SEEK_CURSEEK_END和依次为012.返回值:成功:文件的当前位置失败:-1

例子

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>int main(int argc, char const *argv[])
{int fd;char buf[32] = "";fd = open("a.c", O_RDWR | O_CREAT | O_TRUNC, 0666);if (fd < 0){perror("open err");return -1;}printf("fd:%d\n", fd);// write(fd, "66666", 10);// lseek(fd,0,SEEK_SET);  //定位到文件开头// read(fd, buf, 10);// printf("%s\n", buf);lseek(fd,10,2);            //定位到末尾后10个字符单位write(fd,"k",1);off_t off = lseek(fd,0,SEEK_END);    //利用结尾偏移求出当前长度printf("%ld\n",off);close(fd);return 0;
}

标准IO和文件IO总结

标准IO文件IO
概念C库中定义的一组用于输入输出的函数posix中定义的一组用于输入输出的函数
特点1.有缓冲机制 2.围绕流进行操作,FILE *3.默认打开三个流:stdin/stdout/stderr4.只能操作普通文件5.程序的可移植性更强1.无缓冲机制2.围绕着文件描述符,非负整数3.默认打开三个文件描述符:0/1/24.可以操作除了目录以外的任意类型文件
函数打开文件:fopen、freopen 关闭文件:fclose 读文件:fgetc/fgets/fread 写文件:fputc/fputs/fwrite 定位操作:rewind/fseek/ftell打开文件: open 关闭文件: close 读文件: read 写文件:write 定位操作: lseek

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

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

【漏洞复现】大华智慧园区综合管理平台信息泄露漏洞

Nx01 产品简介 大华智慧园区综合管理平台是一款综合管理平台&#xff0c;具备园区运营、资源调配和智能服务等功能。该平台旨在协助优化园区资源分配&#xff0c;满足多元化的管理需求&#xff0c;同时通过提供智能服务&#xff0c;增强使用体验。 Nx02 漏洞描述 大华智慧园区…

typescript 索引签名类型

ts索引类型简介 在TypeScript中&#xff0c;索引签名类型&#xff08;Index Signature Type&#xff09;是一种特殊的类型&#xff0c;它定义了对象中键的类型以及相应的值的类型。通过使用索引签名类型&#xff0c;我们可以表示一个对象&#xff0c;该对象的键可以是任意类型…

数据结构--红黑树详解

什么是红黑树 红黑树(Red Black Tree)是一种自平衡二叉查找树。它是在 1972 年由 Rudolf Bayer 发明的,当时被称为平衡二叉 B 树(symmetric binary B-trees)。后来,在 1978 年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的“红黑树”。 由于其自平衡的特性,保证…

记一次 .NET某列控连锁系统 崩溃分析

一&#xff1a;背景 1. 讲故事 过年喝了不少酒&#xff0c;脑子不灵光了&#xff0c;停了将近一个月没写博客&#xff0c;今天就当新年开工写一篇吧。 去年年初有位朋友找到我&#xff0c;说他们的系统会偶发性崩溃&#xff0c;在网上也发了不少帖子求助&#xff0c;没找到自…

【regex】正则表达式

集合 [0-9.] [0-9.\-] 例子 正则表达式&#xff0c;按照规则写&#xff0c;写的时候应该不算困难&#xff0c;但是可读性差 不同语言中regex会有微小的差异 vim 需要转义&#xff0c; perl/python中不需要转义 锚位 \b am\b i am 命名 / 命名捕获组 ( 捕获组&#xff08;…

Commonjs 和 Es Module详解

一 前言 今天我们来深度分析一下 Commonjs 和 Es Module&#xff0c;希望通过本文的学习&#xff0c;能够让大家彻底明白 Commonjs 和 Es Module 原理&#xff0c;能够一次性搞定面试中遇到的大部分有关 Commonjs 和 Es Module 的问题。 带上疑问开始今天的分析&#xff1a; …

PyTorch深度学习实战(37)——CycleGAN详解与实现

PyTorch深度学习实战&#xff08;37&#xff09;——CycleGAN详解与实现 0. 前言1. CycleGAN 基本原理2. CycleGAN 模型分析3. 实现 CycleGAN小结系列链接 0. 前言 CycleGAN 是一种用于图像转换的生成对抗网络(Generative Adversarial Network, GAN)&#xff0c;可以在不需要配…

《深入浅出 Spring Boot 3.x》预计3月份发版

各位&#xff0c;目前本来新书《深入浅出 Spring Boot 3.x》已经到了最后编辑排版阶段&#xff0c;即将在3月份发布。 目录&#xff1a; 现在把目录截取给大家&#xff1a; 主要内容&#xff1a; 本书内容安排如下。 ● 第 1 章和第 2 章讲解 Spring Boot 和传统 Spri…

stm32——hal库学习笔记(定时器)

这里写目录标题 一、定时器概述&#xff08;了解&#xff09;1.1&#xff0c;软件定时原理1.2&#xff0c;定时器定时原理1.3&#xff0c;STM32定时器分类1.4&#xff0c;STM32定时器特性表1.5&#xff0c;STM32基本、通用、高级定时器的功能整体区别 二、基本定时器&#xff0…

找不到android.support.v4.app.Fragment的类文件

问题 android.support.v4.app.Fragment的类文件 详细问题 笔者Android项目开发集成QQ登录 控制台报错 D:\AndroidProjects\assistingAgriculture\app\src\main\java\com\example\assistingagriculture\activity\normal_mode\QQLoginActivity.java:43: 错误: 无法访问Fragme…

k-邻近算法(kNN)

目录 k-近邻算法概述 k-近邻算法的一般流程 kNN算法伪代码 k-近邻算法概述 优点&#xff1a;精度高、对异常值不敏感、无数据输入假定 缺点&#xff1a;计算复杂度高、空间复杂度高 适用数据范围&#xff1a;数值型和标称型 k-近邻算法的一般流程 &#xff08;1&#x…

【小呆的力学笔记】弹塑性力学的初步认知五:初始屈服条件(1)

文章目录 3. 初始屈服条件3.1 两个假设以及屈服条件基本形式3.2 π \pi π平面、Lode参数3.3 屈服曲线的一般特征 3. 初始屈服条件 3.1 两个假设以及屈服条件基本形式 在简单拉伸时&#xff0c;材料的屈服很明确&#xff0c;即 σ > σ s (1) \sigma\gt\sigma_s\tag{1} …

[Docker实战] 旭日X3派上Docker Openwrt +Samba 实现局域网NAS 开启AP模式

​ &#x1f308; 博客个人主页&#xff1a;Chris在Coding &#x1f3a5; 本文所属专栏&#xff1a;[旭日X3派] [Docker实战] ❤️ 前置学习专栏&#xff1a;[Linux学习] ⏰ 我们仍在旅途 …

Sora:新一代实时音视频通信框架

一、Sora简介 Sora是一个开源的实时音视频通信框架&#xff0c;旨在提供高效、稳定、可扩展的音视频通信解决方案。它基于WebRTC技术&#xff0c;支持跨平台、跨浏览器的实时音视频通信&#xff0c;并且具备低延迟、高并发、易集成等特点。 --点击进入Sora(一定要科学哦&#x…

【PX4学习笔记】08.PX4中显示在QGC的参数讲解

目录 文章目录 目录PX4参数的获取方式PX4参数的分类PX4常用参数的意义和调整注意事项PX4的姿态控制和位置控制参数常规的调整参数流程 [!NOTE] ​ 姿态控制的P-PID&#xff1a;roll、pitch、yaw三个角速度的内环PID&#xff0c;外环P的控制 ​ 位置控制的P-PID&#xff1a;xy水…

小迪安全27WEB 攻防-通用漏洞SQL 注入Tamper 脚本Base64Jsonmd5 等

#知识点&#xff1a; 1、数据表现格式类型注入 2、字符转义绕过-宽字节注入 3、数字&字符&搜索&编码&加密等 #参考资料&#xff1a; https://www.cnblogs.com/bmjoker/p/9326258.html 扫描&#xff0c;利用工具等都不会自动判断数据类型&#xff0c…

Chrome插件精选 — 缓存清理

Chrome实现同一功能的插件往往有多款产品&#xff0c;逐一去安装试用耗时又费力&#xff0c;在此为某一类型插件挑选出比较好用的一款或几款&#xff0c;尽量满足界面精致、功能齐全、设置选项丰富的使用要求&#xff0c;便于节省一个个去尝试的时间和精力。 1. Chrome清理大师…

深度学习基础——SSD目标检测

SSD网络介绍 使用多个特征图作为特征预测层。 SSD (Single Shot MultiBox Detector)于2016年提出。当网络输入为300300大小时&#xff0c;在VOC2007测试集上达到74.3%的mAP;当输入是512512大小时&#xff0c;达到了76.9%的mAP SSD_Backbone部分介绍 不变的部分 特征提取网…

QT day2

#include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {//设置窗口标题setWindowTitle("有课云登录");//设置窗口图标setWindowIcon(QIcon("C:\\Users\\Administrator\\Desktop\\pictrue\\login.png"));//设置固定窗口大小resi…

5 原型模式 Prototype

1.模式定义: 指原型实例指定创建对象的种类&#xff0c;并且通过拷贝这些原型创建新的对象 2.应用场景&#xff1a; 当代码不应该依赖于需要复制的对象的具体类时&#xff0c;请使用Prototype模式。 Spring源码中的应用 org.springframework.beans.factory.support.AbstractB…
推荐文章