C之fopen/fclose/fread/fwrite/flseek

一、C中文件操作简介

        c中的文件操作大致和linux的文件操作类似,但是毕竟是不同的API,所以会有些差异。部分差异会在下面的案例中体验

二、fopen

        open的参数有两个一个是文件名,一个是模式选择,不同open函数,open中的模式是一个枚举mode_t, 这里的mode类型是一个字符中。

#include <stdio.h>FILE *fopen(const char *pathname, const char *mode);

open参数描述

pathname文件路径
mode模式,设置权限

mode

r以只读方式打开文件
r+以读写方式打开文件
w清空文件或创建文件
w+以读写方式打开文件,文件不存在会创建,如果存在会被截断
a以追加形式打开文件,文件不存在会创建,只能将内容添加到尾部
a+以读写方式打开文件,并在文件后面追加,文件不存在会创建

 返回值

        指向文件流的FILE *指针类型,失败返回NULL

 fopen 和open flag 转换表

三、close

close 比较简单,参数只一个打开的文件的描述符。成功返回0,失败返回EOF。

#include <stdio.h>int fclose(FILE *stream);

四、read

read函数尝试从stream 中 读取nmemb条数据,每条数据的大小为size,并把读取的数据放在ptr指针中。所以读取的数据大小 为 nmemb * size。

如果读取成功返回nmemb; 

如果nmemb * size 超过文件的大小,返回的nmemb大小等于刚超过文件大小的值。比如文件中只有12345,size设置成3,nmemb如果设置成2,则返回2,如果设置超过2,也只能返回2。

nmemb: 可以理解为number of member block, 内存块的数量

#include <stdio.h>size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

五、write

write函数尝试向stream 中写入nmemb条数据,每条数据的大小为size,写入的数据放在ptr指针中。所以写入的数据大小为 nmemb * size。

如果写入成功返回nmemb;

如果nmemb * size 超过ptr缓冲区大小也能写入成功,也会返回nmemb。

#include <stdio.h>size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

六、lseek

重定位光标的位置。根据设置whence 来进行offset偏移,offset为负代码左偏移,为正代表右偏移。

成功返回0,失败返回-1; 通过调用ftell来获取当前光标的位置。而不是像lseek直接返回光标的位置。

#include <sys/types.h>
#include <unistd.h>off_t lseek(int fd, off_t offset, int whence);

常用 whence

SEEK_SET定位到文件起始位置
SEEK_CUR定位到当前位置
SEEK_END定位到文件结束位置

七、自定cp命令

argc: 代表参数数量 argument count 

argv :代表argument vector ,是一个指针数组(数组元素类型是char *),或者说是一个二级指针(char **argv)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>int main(int argc, char *argv[]) {FILE *src, *des;char *readBuf = NULL;if(argc != 3) {printf("paramer error\n");exit(-1);}src = fopen(argv[1], "r");fseek(src, 0, SEEK_END);int size = ftell(src);fseek(src, 0, SEEK_SET);printf("size = %d", size);readBuf = (char *)malloc(sizeof(char) * size + 1);int readCount = fread(readBuf, size, 1, src);des = fopen(argv[2],  "w+");fwrite(readBuf, strlen(readBuf), 1, des);fclose(src);fclose(des);return 0;
}

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

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

相关文章

[RoarCTF 2019]Easy Calc - RCE(函数输出)+参数waf绕过(PHP字符串解析特性)

[RoarCTF 2019]Easy Calc 1 解题流程2 思考总结1 解题流程 打开页面让我们输入,输了没反应(执行报错),F12发现js有代码$(#calc).submit(function(){$.ajax(

几种预训练模型微调方法和peft包的使用介绍

文章目录 微调方法Lora(在旁边添加训练参数)Adapter&#xff08;在前面添加训练参数&#xff09;Prefix-tuning&#xff08;在中间添加训练参数&#xff09;Prompt tuning PEFTPEFT 使用PeftConfigPeftModel保存和加载模型 微调方法 现流行的微调方法有&#xff1a;Lora,promp…

【车载开发系列】嵌入式开发之中断向量表

【车载开发系列】嵌入式开发之中断向量表 嵌入式中断向量表 【车载开发系列】嵌入式开发之中断向量表一. 中断向量表的概念1&#xff09;中断向量2&#xff09;中断向量表3&#xff09;中断向量表的存放 二. 中断向量表的特点三. 中断向量表的作用四. 上电后第一条指令五. 芯片…

Filter(过滤器)Intercerptor(拦截器)

Filter过滤器 顾名思义&#xff0c;Filter可以对请求进行过滤&#xff0c;当浏览器发送请求时&#xff0c;首先先会被Filter进行拦截&#xff0c;Filter可以决定此次拦截是否放行&#xff0c;如果选择放行&#xff0c;放行之后还会返回Filter执行剩下的代码。 使用方法&…

Arduino程序设计(十四)舵机控制实验(SG90)

舵机控制实验 前言一、SG90舵机1、SG90舵机简介2、硬件电路连线3、Servo库常用函数 二、舵机实验1、舵机0~180来回转动2、串口控制舵机转动固定角度 总结 前言 本文介绍SG90舵机控制原理及实验&#xff0c;主要内容有&#xff1a;1、介绍SG90舵机&#xff1b;2、舵机0~180来回…

198、RabbitMQ 的核心概念 及 工作机制概述; Exchange 类型 及 该类型对应的路由规则

JMS 也是一种消息机制 AMQP ( Advanced Message Queuing Protocol ) 高级消息队列协议 ★ RabbitMQ的核心概念 Connection&#xff1a; 代表客户端&#xff08;包括消息生产者和消费者&#xff09;与RabbitMQ之间的连接。 Channel&#xff1a; 连接内部的Channel。 Exch…

bash上下键选择选项demo脚本

效果如下&#xff1a; 废话不多说&#xff0c;上代码&#xff1a; #!/bin/bashoptions("111" "222" "333" "444") # 选项列表 options_index0 # 默认选中第一个选项 options_len${#options[]}echo "请用上下方向键进行选择&am…

【例题】逆波兰表达式求值(图解+代码)

【例题】逆波兰表达式求值(图解代码) 这里写目录标题 【例题】逆波兰表达式求值(图解代码)逆波兰表达式解释优点转换计算代码 题目描述 : 逆波兰表示法是一种将运算符&#xff08;operator&#xff09;写在操作数&#xff08;operand&#xff09;后面的描述程序&#xff08;算式…

Ubuntu16.04apt更新失败

先设置网络设置 换成nat、桥接&#xff0c;如果发现都不行&#xff0c;那么就继续下面操作 1.如果出现一开始就e&#xff0c;检查源&#xff0c;先换源 2.换完源成功之后&#xff0c;ping网络&#xff0c;如果ping不通就是网络问题 如果ping baidu.com ping不通但是ping 112…

汽车烟雾测漏仪(EP120)

【汽车烟雾测漏仪&#xff08;EP120&#xff09;】 此烟雾测漏仪专为车辆管道&#xff08;油道、气道、冷却管道&#xff09; 的泄露检测而设计。适用于所有轻型 汽车、摩托车、轻卡、游艇等。 【特点】 具有空气模式和烟雾模式。空气模式&#xff0c;无需烟雾&#xff0c;检测…

C进阶-自定义类型:结构体、枚举、联合

本章重点&#xff1a; 结构体&#xff1a; 结构体类型的声明 结构的自引用 结构体变量的定义和初始化 结构体内存对齐 结构体传参 结构体实现位段&#xff08;位段的填充&可移植性&#xff09; 1 结构体的声明 1.1 结构的基础知识 结构是一些值的集合&#xff0c;这些值称…

VGG卷积神经网络实现Cifar10图片分类-Pytorch实战

前言 当涉足深度学习&#xff0c;选择合适的框架是至关重要的一步。PyTorch作为三大主流框架之一&#xff0c;以其简单易用的特点&#xff0c;成为初学者们的首选。相比其他框架&#xff0c;PyTorch更像是一门易学的编程语言&#xff0c;让我们专注于实现项目的功能&#xff0…