【Linux】嵌入式开发,在Linux中使用C语言对标准I/O库文件的替换Copy

简介: <p><span style="white-space:pre"></span><span style="font-size:24px"><span style="white-space:pre"></span>首先,我专业是是电子工程专业,C语言每年都在用,可实际上,我大多数时间都用在网站开发上,没多少时间用于本专业,以及了解C语言更多的基础,所以,我C语言很差,真的很差。</span>

首先,我专业是是电子工程专业,C语言每年都在用,可实际上,我大多数时间都用在网站开发上,没多少时间用于本专业,以及了解C语言更多的基础,所以,我C语言很差,真的很差。

就本例,我在懵懵懂懂下,竟然错了差不多200+次的代码修改,操作近一千五次!仅仅47行的代码(包含注释!)!


如此,对于别人来说,真是感到不屑,不过,对于本人有着非常重要的心得体会!


题目要求:从源文件字符的中间起,5位开始显示!(我这里做了2位!)


案例是书本上的:

#define	BUFFER_SIZE	1024		/* 每次读写缓存大小 */
#define SRC_FILE_NAME	"src_file"	/* 源文件名 */
#define DEST_FILE_NAME	"dest_file"	/* 目标文件名文件名 */
#define OFFSET		10240		/* 拷贝的数据大小 */
int main()
{	FILE *src_file, *dest_file;
	unsigned char buff[BUFFER_SIZE];
	int real_read_len;	
	/* 以只读方式打开源文件 */
	src_file = fopen(SRC_FILE_NAME, "r");	
	/* 以只写方式打开目标文件,若此文件不存在则创建 */
	dest_file = fopen(DEST_FILE_NAME, "w");	
	if (!src_file || !dest_file)
	{	printf("Open file error\n");
		exit(1);	}	
	/* 将源文件的读写指针移到最后10KB的起始位置*/
	fseek(src_file, -OFFSET, SEEK_END);	
	/* 读取源文件的最后10KB数据并写到目标文件中,每次读写1KB */
	while ((real_read_len = fread(buff, 1, sizeof(buff), src_file)) > 0)
	{fwrite(buff, 1, real_read_len, dest_file);}	
	fclose(dest_file);
	fclose(src_file);
	return 0;	}


——————————————————————————————————————

我的源文件:

file.c

//by叶箫大人
//新浪微博 @叶箫大人 
//2015.6.12 
#include"unistd.h"
#include"sys/types.h"
#include"sys/stat.h"
#include"fcntl.h"
#include"stdlib.h"
#include"string.h"
#include"stdio.h"

#define buffersize 1024  //每次读写缓存大小
#define srcfiles "srcfile"//源文件名字
#define destfiles "destfile"//目标文件名
#define OFFSET 1024 //拷贝数据大小

int main()
{
	FILE *srcfile,*destfile;//定义指针 
	unsigned  char buff[buffersize];//定义数组buff 
	int realreadlen;				//定义字符长度 

//以只读方式打开源文件
srcfile = fopen(srcfiles, "r");
//以只写方式打开目标文件,若不存在则创建
destfile = fopen(destfiles, "w");
	if(!srcfile||!destfile)
	{
		printf("Oh,Sorry File Open Error!\n");
		exit(1);
	}
//读取源文件的最后10k的数据并写到目标文件中,每次读写1k

while((realreadlen = (fread(buff,1,sizeof(buff),srcfile)/2))>0)		
	{
		fseek(srcfile,-(realreadlen), SEEK_END);
		//14=总字符长度的减去中间要写的数值 
		realreadlen = (fread(buff,1,sizeof(buff),srcfile)+realreadlen-14);
		{   
			fwrite(buff,1,realreadlen,destfile);//写入destfile		
		}
	}
	fclose(destfile);//关闭destfile 
	fclose(srcfile);//关闭srcfile 
	return 0;
}

srcfile(源文件)

0123456789ABCDEF



目录
相关文章
|
7天前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
57 13
|
26天前
|
传感器 人工智能 物联网
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发,以及面临的挑战和未来趋势,旨在帮助读者深入了解并掌握这些关键技术。
42 6
|
1月前
|
存储 安全 物联网
C语言物联网开发之设备安全与代码可靠性隐患
物联网设备的C语言代码安全与可靠性至关重要。一是防范代码安全漏洞,包括缓冲区溢出和代码注入风险,通过使用安全函数和严格输入验证来预防。二是提高代码跨平台兼容性,利用`stdint.h`定义统一的数据类型,并通过硬件接口抽象与适配减少平台间的差异,确保程序稳定运行。
|
25天前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
39 1
|
25天前
|
NoSQL 编译器 C语言
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。高级技巧包括内存检查、性能分析和符号调试。通过实践案例学习如何有效定位和解决问题,同时注意保持耐心、合理利用工具、记录过程并避免过度调试,以提高编程能力和开发效率。
41 1
|
25天前
|
传感器 存储 物联网
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点,广泛应用于嵌入式系统开发、通信协议实现及后端服务构建等领域,成为推动物联网技术进步的重要力量。
32 1
|
26天前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
45 2
|
1月前
|
存储 网络协议 物联网
C 语言物联网开发之网络通信与数据传输难题
本文探讨了C语言在物联网开发中遇到的网络通信与数据传输挑战,分析了常见问题并提出了优化策略,旨在提高数据传输效率和系统稳定性。
|
2月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
113 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
3月前
|
存储 传感器 物联网
结合物联网开发探讨C语言的变量
在物联网(IoT)开发中,C语言的变量起着至关重要的作用。由于物联网设备资源有限,C语言的高效性和对硬件的直接控制使其成为开发嵌入式系统的首选。