学习笔记——C语言基本概念文件——(13)

1、文件操作

1.1、文件概念

文件:实现数据存储的载体

1.2、文件的分类

按照数据的组织形式分类:

        1.字符文件/文本文件

        2.二进制文件

按照用途分类:

        1.系统文件

        2.库文件--标准库文件/非标准库文件(第三方库)

        3.用户文件

Linux下的文件分类:

        -: 普通文件
        d: 目录文件/文件夹
        s: 套接字文件
        p: 管道文件
        l(小写的 L): 链接文件
        c: 字符设备文件
        b: 块设备文件


1.3、文件操作相关的函数

函数:man1 一般是指令

           man2 一般是系统相关函数

           man3一般是C语言标准库函数

文件操作相关流程:
        1.打开文件--仅仅得到一个文件描述符

        2.写/读--用函数操作文件描述符

        3.关闭文件

1.3.1 打开文件

函数的头文件为:#include<stdio.h>

函数名:fopen

函数原型:FILE *fopen(const char *pathname, const char *mode);

形参:pathname:路径下的文件名

            mode:打开文件的模式

“r”:   只读的方式打开, 光标在文件开头, 文件不存在, 打开失败!
“r+”: 读写的方式打开, 光标在文件开头, 文件不存在, 打开失败!
“w”: 只写的方式打开, 光标在文件开头, 文件不存在, 创建并打开, 文件存在, 清空
写!
“w+”: 读写的方式打开, 光标在文件开头, 文件不存在, 创建并打开, 文件存在, 清
空写!
“a”: 追加写, 光标在文件末尾, 文件如果不存在, 创建并打开;
“a+”: 可读可写, 根据你第一次操作该文件来确定光标位置, 第一次如果是读,光标默认在文件开头,第一次如果是写,光标在文件末尾;

返回值:

成功返回,FILE*;类型的文件描述符

失败:NULL;

#include<stdio.h>
int main()
{FILE*fp=fopen("./1.txt","r+");if(fp==NULL){printf("文件打开失败");return ;}return;
}

如果1.txt是存在的:打开成功,后续fp就代表1.txt这个文件

如果1.txt是不存在的:打开失败!

插入:perror--打印失败信息

头文件:#include<stdio.h>

函数原型:void perror(const char *s);

形参:s--提供一个字符串即可

功能:打印距离它最近的函数执行失败的原因;注意:这个离它最近的函数指的是从上到下的近。

1.3.2 关闭函数

头文件:#include<stdio.h>

函数原型:int fclose(FILE *stream);

形参:stream:用fopen打开文件得到的文件描述符

返回值:

        成功返回:0

        失败返回:-1

1.3.3 读和写函数

1单字符的读和写

        单字符的写:fputc

        头文件:#include<stdio.h>

        函数原型:int fputc(int c, FILE *stream);

        形参:c--传入char类型的单字符

        将字符c写到文件指针所指向的文件的当前写指针的位置

        stream--文件描述符

        返回值:

                成功:返回写入的单字符

                失败:返回-1

        单字符的读:fgetc

        头文件:#include<stdio.h>

        函数原型:int fgetc(FILE *stream);

        形参: stream-文件描述符
        返回值:
                成功: 读取到的单字符, 用 char 类型来承接;
                失败/读到文件末尾: -1

        插入: rewind: 光标偏移至文件开头
        void rewind(FILE *stream);
        stream: fopen 的返回值
        功能: 光标偏移至文件开头


2 字符串的读和写

        字符串的写:fputs

        函数原型:int fputs(const char *s, FILE *stream);
        形参: s: 要写入文件中的字符串的首地址
                        stream: fopen 的返回值;
        返回值: 成功返回一个非负数( 通常为 1) , 失败返回-1


        字符串的读: fgets
        函数原型:char *fgets(char *s, int size, FILE *stream);
        形参: s: 读取到的内容存放的位置的首地址;
                    size: 你要读多大! !
                    stream: fopen 的返回值;
                    返回值: 成功: char * -- 依旧是 s
                    失败: NULL

C语言默认打开的三个文件

标准输入文件描述符--stdin--对应键盘

标准输出文件描述符--stdout--对应屏幕

标准出错文件描述符--stderr--对应屏幕

3格式化的读和写

        格式化写入:fprintf

        fprintf(fopen(返回值),“原样输出+格式控制符”,输出列表)

        注意:fprintf(stdout,“hello\n”); == printf(“hello\n”);

        格式化读取:fscanf

        要求:fscanf从文件中读,要求格式和fprintf()写入时一模一样;

        这两个函数必须是配合使用的

举例说明:

int a=10,b=20,c=30;fprintf(fp,”%d-%d-%d\n”,a,b,c);int x,y,z;fscanf(fp,”%d-%d-%d\n”,&x,&y,&z);

4 块读 块写(二进制,要配合使用)

块写:fwrite

函数原型:size_t fwrite(const void *ptr,size_t size,size_t nmemb,FILE *stream);
形参:ptr:要写入的内容的首地址

        size:一次写多大

        nmemb:写几次

        stream:fopen的返回值;

        返回值:真正写入的次数

块读:fread

函数原型:size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream);

形参:ptr:读取的内容存放的位置的首地址

        size:一次读多大

        nmemb:读几次

        stream:fopen的返回值;

        返回值:成功:真正读取的次数,

遇到文件末尾,返回0

光标偏移函数:fseek

头文件:#include<stdio.h>

函数原型:int fseek(FILE *stream, long offset,int whence);

形参:stream:文件描述符

offset:偏移量+往文件末尾方向-往文件开头方向

whence:相对位置

SEEK_SET 文件开头
SEEK_CUR 当前位置
SEEK_END 文件末尾
fseek(fp,0,SEEK_SET); == rewind(fp); 以文件开头为起始位置, 偏移 0 字节


ftell函数:计算光标当前位置举例文件开头的偏移量

函数原型:long ftell(FILE *stream);

形参:stream:文件描述符

返回值:光标当前位置举例文件开头的偏移量

程序中计算文件的大小

fessk(fp,0,SEEK_END);//光标达到文件末尾

long num=ftell(fp);//num就是文件大小

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

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

相关文章

SQL注入sqli_labs靶场第二题

解题思路与第一题相同 ?id1 and 11 和?id1 and 12进行测试如果11页面显示正常和原页面一样&#xff0c;并且12页面报错或者页面部分数据显示不正常&#xff0c;那么可以确定此处为数字型注入。 联合查询&#xff1a; 猜解列名数量&#xff1a;3 ?id1 order by 4 判断回显…

防止邮箱发信泄露服务器IP教程

使用QQ邮箱,网易邮箱,189邮箱,新浪邮箱,139邮箱可能会泄露自己的服务器IP。 泄露原理&#xff1a;服务器通过请求登录SMTP邮箱服务器接口&#xff0c;对指定的收件人发送信息。 建议大家使用商业版的邮箱&#xff0c;比如阿里云邮箱发信等 防止邮件发信漏源主要关注的是确保邮件…

机器学习和深度学习--李宏毅 (笔记与个人理解)Day7

Day7 Regression Case study &#xff08;预测宝可梦的cp&#xff09; Regression 可以做什么&#xff1f; 股票预测 自动驾驶 推荐 预测宝可梦的cp&#xff08;能力类似这样的属性把&#xff09; 这里突然想到&#xff0c;是不是可以用洛克王国和赛尔号做事情哈哈 注意&#…

6种xinput1_3.dll丢失的解决办法,并探讨xinput1_3.dll丢失的原因及其属性。

xinput1_3.dll扮演着Visual C运行时库中不可或缺的角色&#xff0c;众多电脑软件都需依赖它以确保正常运行。 当您启动软件时&#xff0c;若遇到xinput1_3.dll无法执行代码的提示&#xff0c;可能会导致软件无法如常启动或运行。本文将向您介绍6种解决方案&#xff0c;并探讨xi…

Java基于微信小程序的乐室预约系统(V2.0),附源码

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

global.d.ts 无效问题解决

问题描述 和 src 同级目录有一个 types目录&#xff0c;其中包含 global.d.ts&#xff0c;如下 declare global {interface Window {config: {url: string;};} }在组件中访问 window.config x;ts显示此错误 Error:(10, 22) TS2339: Property config does not exist on typ…

WEB前端-倒计时练习

<body><div>距离2024年7月3日还有&#xff1a;<br><span id"d">0</span>天<span id"h">0</span>小时<span id"m">0</span>分钟<span id"s">0</span>秒</div>…

jQuery 数字金额转化为英文大写

示例&#xff1a;100转化为SAY ONE HUNDRED AND POINT ONLY //数字金额转换英文大写&#xff08;金额上线不能超过10亿&#xff09; var arr1new Array(""," THOUSAND"," MILLION"," BILLION") var arr2new Array("ZERO",&…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《新型电力系统多阶段输-储协同分布鲁棒规划》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

【PHP系统学习】——Laravel框架数据库的连接以及数据库的增删改查的详细教程

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

蓝桥杯——考勤刷卡

题目 小蓝负责一个公司的考勤系统,他每天都需要根据员工刷卡的情况来确定 每个员工是否到岗。 当员工刷卡时,会在后台留下一条记录,包括刷卡的时间和员工编号,只 要在一天中员工刷过一次卡,就认为他到岗了。 现在小蓝导出了一天中所有员工的刷卡记录,请将所有到岗员工的员工编…

创建网络名称空间后的Linux幕后工作解析

Linux网络名称空间&#xff08;Network Namespace&#xff09;是一种强大的虚拟化技术&#x1f310;&#xff0c;允许用户隔离网络设备、IP地址、路由表等网络资源。这项技术在容器化和虚拟化领域发挥着关键作用&#xff0c;是构建现代云基础设施的基石之一⛅。当你创建一个新的…

ubuntu常用指令(1)

ls&#xff1a;列出当前目录中的文件和子目录pwd&#xff1a;显示当前工作路径cd /*&#xff1a;切换到指定目录mkdir file_name&#xff1a;创建新目录rmdir file_name&#xff1a;删除文件或目录cp file_name&#xff1a;复制文件或目录mv old_name new_name&#xff1a;重命…

无人机炸机后还能修复吗?

无人机炸机后是否还能修复&#xff0c;取决于炸机的具体情况和损坏程度。 一般来说&#xff0c;如果无人机的损坏比较严重&#xff0c;例如主要结构部件断裂或严重变形&#xff0c;电机、电池、电子设备等核心部件损坏&#xff0c;那么修复的难度和费用会比较高&#xff0c;可…

2024年华为OD机试真题-最大N个数与最小N个数的和-Python-OD统一考试(C卷)

题目描述: 给定一个数组,编写一个函数来计算它的最大N个数与最小N个数的和。你需要对数组进行去重。 说明: 数组中数字范围[0, 1000] 最大N个数与最小N个数不能有重叠,如有重叠,输入非法返回-1 输入非法返回-1 输入描述: 第一行输入M, M标识数组大小\n第二行输入M个数,标…

Threadlocal什么情况下会造成内存泄露?怎么避免?

ThreadLocal 在某些情况下可能会导致内存泄露&#xff0c;主要是由于线程的生命周期超过了预期而导致的。以下是一些可能导致 ThreadLocal 内存泄露的情况&#xff1a; 线程池的使用&#xff1a;如果在使用线程池的情况下&#xff0c;没有正确清理 ThreadLocal 变量&#xff0c…

Quanto: PyTorch 量化工具包

量化技术通过用低精度数据类型 (如 8 位整型 (int8)) 来表示深度学习模型的权重和激活&#xff0c;以减少传统深度学习模型使用 32 位浮点 (float32) 表示权重和激活所带来的计算和内存开销。 减少位宽意味着模型的内存占用更低&#xff0c;这对在消费设备上部署大语言模型至关…

nginx配置证书和私钥进行SSL通信验证

文章目录 一、背景1.1 秘钥和证书是两个东西吗&#xff1f;1.2 介绍下nginx配置文件中参数ssl_certificate和ssl_certificate_key1.3介绍下nginx支持的证书类型1.4 目前nginx支持哪种证书格式&#xff1f;1.5 nginx修改配置文件目前方式也会有所不同1.6 介绍下不通格式的证书哪…

[opencv]VideoWriter写出fourcc格式

fourcc支持的格式 fourcc全名Four-Character Codes&#xff0c;四字符代码&#xff0c;该编码由四个字符组成 cv2.VideoWriter_fourcc(O,O,O,O) cv2.VideoWriter_fourcc(*OOOO) 通常写法有上述两种形式&#xff0c;O代表一个字符&#xff0c;通常有 支持avi格式的有&#…

【leetcode面试经典150题】42. 有效的字母异位词(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…