嵌入式学习——Linux操作系统——文件编程练习


1.使用fread和fwrite方式完成任意普通文件的拷贝功能。
模拟 文件下载

#include <stdio.h>void do_copy(FILE *fp_s,FILE *fp_d)
{char buf[100] = {0};int ret;while (ret = fread(buf,sizeof(char),sizeof(buf),fp_s))fwrite(buf,sizeof(char),ret,fp_d);
}//./a.out src dest 
int main(int argc, const char *argv[])
{if (argc != 3){printf("Usage: %s <src> <dest>\n",argv[0]);return -1;}FILE *fp_s = fopen(argv[1],"r");FILE *fp_d = fopen(argv[2],"w");if (fp_s == NULL || fp_d == NULL){perror("fopen fail");return -1;}//创建空洞文件 fseek(fp_s,0,SEEK_END);long len = ftell(fp_s);//1.偏移 fseek(fp_d,len-1,SEEK_SET);//2.写 fputc('\0',fp_d);fflush(fp_d);//	getchar();rewind(fp_s);rewind(fp_d);do_copy(fp_s,fp_d);fclose(fp_s);fclose(fp_d);return 0;
}
#include <stdio.h>
#include <stdlib.h>//./a.out src dest 
int main(int argc, const char *argv[])
{if (argc != 3){printf("Usage: %s <src> <dest>\n",argv[0]);return -1;}FILE *fp_s = fopen(argv[1],"r");FILE *fp_d = fopen(argv[2],"w");if (fp_s == NULL || fp_d == NULL){perror("fopen fail");return -1;}//创建空洞文件 fseek(fp_s,0,SEEK_END);long len = ftell(fp_s);//1.偏移 fseek(fp_d,len-1,SEEK_SET);//2.写 fputc('\0',fp_d);fflush(fp_d);//	getchar();rewind(fp_s);rewind(fp_d);//	do_copy(fp_s,fp_d);char *buf = malloc(len);int ret = fread(buf,sizeof(char),len,fp_s);fwrite(buf,sizeof(char),ret,fp_d);fclose(fp_s);fclose(fp_d);return 0;
}


//1.打开
创建空洞文件
//2.拷贝
//3.关闭

2.实现插入功能,
指定要插入的位置 (如100个字节之后,)
指定要插入的内容 (如hello)
则最终效果是将 hell插入到了100个字节的后面


hello
a.定位到要插入的位置
后面的数据读走
b.重新定位到要插入的位置
输入数据
c.将刚才读走的数据写到插入数据的后面
 

#include <stdio.h>
#include <string.h>int main(int argc, const char *argv[])
{if (argc!= 2){printf("Usage: %s <file>\n",argv[0]);return -1;}FILE *fp = fopen(argv[1],"r+");if (fp == NULL){perror("fopen fail");return -1;}printf("Input a offset:");int offset;scanf("%d",&offset);getchar();printf("Input a string:");char buf[100];fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1] = '\0';fseek(fp,0,SEEK_END);long len = ftell(fp);fseek(fp,offset,SEEK_SET);char buff[len-offset];int ret = fread(buff,sizeof(char),sizeof(buff),fp);fseek(fp,offset,SEEK_SET);fwrite(buf,sizeof(char),strlen(buf),fp);fwrite(buff,sizeof(char),ret,fp);fclose(fp);return 0;
}


3.统计文本文件中a-z,出现的次数。
a:12
b:23
c:
z:34

#include<stdio.h>  int main(int argc, const char *argv[])  
{  if (argc != 2) {  printf("Usage: %s <filename>\n", argv[0]);  return 1;  }  FILE *fp = fopen(argv[1], "r");  if (fp == NULL) {  perror("Error opening file");  return 1;  }  int a[26] = {0};  char b;  while ((b = fgetc(fp)) != EOF)  {  if (b >= 'a' && b <= 'z')  {  a[b - 'a']++;  }  }  int i = 0;  for (i = 0; i < 26; ++i)  {  printf("%c:%d\n", 'a' + i, a[i]);  }  fclose(fp);  return 0;  
}


4. 完成两个文件的合并操作。
./a.out 1.txt 2.txt 3.txt

#include<stdio.h>  int main(int argc, const char *argv[])  
{  if (argc != 4) {  printf("Usage: %s <filename><filename><filename>\n", argv[0]);  return -1;  }  FILE *fp1 = fopen(argv[1], "r"); FILE *fp2 = fopen(argv[2], "r"); FILE *fp3 = fopen(argv[3], "a+"); if (fp1 == NULL||fp2 == NULL ||fp3 == NULL) {  perror("Error opening file");  return -1;  }  char buf1[1024];char buf2[1024];int num1 = fread(buf1,1,sizeof(buf1),fp1);fwrite(buf1,1,num1,fp3);int num2 = fread(buf2,1,sizeof(buf2),fp2);fseek(fp3,num1,SEEK_SET);fwrite(buf2,1,num2,fp3);fclose(fp1);fclose(fp2);fclose(fp3);return 0;  
}

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

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

相关文章

开源网安参编的《代码大模型安全风险防范能力要求及评估方法》发布

​代码大模型在代码生成、代码翻译、代码补全、错误定位与修复、自动化测试等方面为研发人员带来了极大便利的同时&#xff0c;也带来了对安全风险防范能力的挑战。基于此&#xff0c;中国信通院依托中国人工智能产业发展联盟&#xff08;AIIA&#xff09;&#xff0c;联合开源…

深圳比创达|EMC电磁兼容性行业:电子设备质量的“守门员”

随着科技的不断进步和电子产品的普及&#xff0c;电磁兼容性&#xff08;EMC&#xff09;问题愈发受到行业内外的高度关注。EMC作为衡量电子设备在电磁环境中能否正常工作的重要指标&#xff0c;对于保障设备稳定运行、减少电磁干扰、提升产品质量具有重要意义。 一、EMC电磁兼…

水产养殖监测系统解决方案有哪几部分

随着科技的不断进步&#xff0c;水产养殖行业也迎来了智能化、信息化的新时代。在这一背景下&#xff0c;水产养殖监测系统解决方案应运而生&#xff0c;为养殖企业提供了科学、高效的管理工具。 一、系统概述 水产养殖监测系统是通过现代传感技术、数据分析技术以及互联网通信…

微信小程序(跳转)

在微信小程序中&#xff0c;常用的跳转方式包括以下几种 1.页面跳转 可以使用wx.navigateTo、wx.redirectTo和wx.reLaunch方法实现页面的跳转。 wx.navigateTo&#xff1a;保留当前页面&#xff0c;跳转到应用内的某个页面。wx.redirectTo&#xff1a;关闭当前页面&#xff…

【每日一题】503. 下一个更大元素 II

思路&#xff08;c&#xff09; 使用单调栈的解法&#xff0c;单调栈里面存的是大于当前元素的index&#xff0c;不是直接存值。但是这个题目是一个循环数组&#xff0c;可以在后面补一段前面的内容&#xff0c;这样就可以正常遍历。将每个位置对应的结果存在map中 后面循环…

mysql的语句查询顺序、耗时分析以及查询调优技巧

在MySQL中&#xff0c;SQL查询语句的执行顺序、耗时分析以及查询调优是优化数据库性能的重要方面。以下是关于这些方面的详细解释。 1. SQL查询语句的执行顺序 虽然我们编写SQL语句的顺序通常是 SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY -…

前后端分离后灰度发布实现方式

1、什么是灰度发布 灰度发布, 也叫金丝雀发布。是指在黑与白之间&#xff0c;能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式&#xff0c;让一部分用户继续用A&#xff0c;一部分用户开始用B&#xff0c;如果用户对B没有什么反对意见&#xff0c;那么逐步扩大范围&…

MySQL 教程

MySQL 教程 目录 简介安装 MySQL WindowsmacOSLinux 连接 MySQL 命令行客户端图形化工具 基础操作 创建数据库删除数据库选择数据库 表的操作 创建表删除表插入数据查询数据更新数据删除数据 高级操作 索引视图存储过程触发器 用户管理 创建用户授权删除用户 备份与恢复 备份…

Vatee万腾平台:技术引领,智能先行

在科技日新月异的今天&#xff0c;智能技术正以前所未有的速度改变着我们的世界。在众多科技平台中&#xff0c;Vatee万腾平台凭借其卓越的技术实力和前瞻性的战略眼光&#xff0c;成为了智能技术领域的佼佼者。它始终坚持“技术引领&#xff0c;智能先行”的理念&#xff0c;推…

如何在 Odoo 17 库存模块中进行质量控制

质量控制是确保制造产品质量符合最终要求的关键步骤。有效的质量控制能够提高客户满意度。在生产过程中,质量检测可以在多个环节进行,以便及时发现并解决问题。不同的行业采用的质量控制技术可能有所不同。 在商业尤其是制造业中,保证产品质量至关重要。一个产品需要经过多次…

【科技前沿】电子设计新贵SmartEDA:为何它引领行业风潮?

在当今这个电子科技日新月异的时代&#xff0c;电子设计工具如同设计师的魔法棒&#xff0c;不断推动着产品创新的速度。而近期&#xff0c;一款名为SmartEDA的电子国产设计仿真软件异军突起&#xff0c;成为了行业内的新宠。那么&#xff0c;SmartEDA究竟有何过人之处&#xf…

Adaptive Server Connection Failed on Windows

最近在使用pymssql &#xff08;版本2.3.0&#xff09;连接SQL Server2012遇到如下问题&#xff1a; pymssql._mssql.MSSQLDatabaseException: (20002, bDB-Lib error message 20002, severity 9:\nAdaptive Server connection failed (localhost)\nDB-Lib error message 2000…

LeetCode:503. 下一个更大元素 II(Java 单调栈)

目录 503. 下一个更大元素 II 题目描述&#xff1a; 实现代码与解析&#xff1a; 单调栈 原理思路&#xff1a; 503. 下一个更大元素 II 题目描述&#xff1a; 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&…

分布式锁实现方案-基于Redis实现的分布式锁

目录 一、基于Lua看门狗实现 1.1 缓存实体 1.2 延迟队列存储实体 1.3 分布式锁RedisDistributedLockWithDog 1.4 看门狗线程续期 1.5 测试类 1.6 测试结果 1.7 总结 二、RedLock分布式锁 2.1 Redlock分布式锁简介 2.2 RedLock测试例子 2.3 RedLock 加锁核心源码分析…

2009年-2022年 地级市-环境污染处罚数据

环境污染处罚数据是环境保护领域中重要的信息资源&#xff0c;它记录了因违反环保法律法规而受到行政处罚或法律制裁的具体情况。这些数据对于提高公众的环保意识、促进企业采取环保措施以及推动环境治理具有重要作用。 数据内容概述 违法行为的主体&#xff1a;即受到处罚的…

私域引流的艺术:高效策略解锁流量密码

在数字化营销的浪潮中&#xff0c;私域流量以其高黏性和低成本的优势成为品牌和企业竞相追逐的宝藏。然而&#xff0c;如何有效引流至私域&#xff0c;却成了摆在每个运营者面前的难题。今天&#xff0c;我们将一起探索那些值得采用的私域引流方法&#xff0c;帮助你解锁流量的…

虚拟机有哪些写一篇文章

虚拟机技术作为现代计算环境中的重要组成部分&#xff0c;极大地丰富了我们对资源管理和系统部署的理解与实践。本文将深入探讨虚拟机的定义、工作原理、应用场景、优势、主要技术以及未来发展趋势&#xff0c;帮助读者全方位地理解虚拟机这一强大技术。 虚拟机概述虚拟机&…

利用cuda的cublas库,编写复数矩阵乘的代码

学习内容&#xff1a; 利用cuda的cublas库&#xff0c;编写复数矩阵乘的代码 学习产出&#xff1a; 编写代码如下&#xff1a; #include <stdio.h> #include <stdlib.h> #include <cuda_runtime.h> #include <cublas_v2.h> #include <random>…

【力扣】从前序与中序遍历序列构造二叉树

&#x1f525;博客主页&#xff1a; 我要成为C领域大神 &#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于分享知识&#xff0c;欢迎大家共同学习和交流。 给定两个整数数…

如何解决app广告填充率低、广告填充异常,提升广告变现收益?

APP广告变现有助于开发者获得持续的收益来源&#xff0c;由于广告链路的封闭性和复杂化&#xff0c;一旦出现请求配置参数错误、返回广告源信息缺失、素材被拦截等异常&#xff0c;大部分开发者很难及时查清异常情况&#xff0c;导致广告填充率不理想&#xff0c;甚至填充率常常…