嵌入式开发学习———Linux环境下IO进程线程学习(一)

IO的基本概念

IO(输入输出)是计算机与外部设备或文件交换数据的过程,分为输入(如键盘、文件读取)和输出(如屏幕显示、文件写入)。

文件IO

文件IO通过系统调用直接操作文件描述符,属于低级IO,不提供缓冲机制。常用函数包括open()read()write()close()等。

c 复制代码
#include <fcntl.h>
#include <unistd.h>

int fd = open("file.txt", O_RDWR);
char buf[100];
read(fd, buf, sizeof(buf));
write(fd, "data", 4);
close(fd);

标准IO

标准IO通过文件指针(FILE*)操作,提供缓冲机制,效率更高。常用函数包括fopen()fread()fwrite()fclose()等。

c 复制代码
#include <stdio.h>

FILE* fp = fopen("file.txt", "r+");
char buf[100];
fread(buf, 1, sizeof(buf), fp);
fwrite("data", 1, 4, fp);
fclose(fp);

主要区别

  • 文件IO:直接系统调用,无缓冲,需手动管理细节。
  • 标准IO:封装系统调用,带缓冲,操作更高效简洁。

作业 :

1.输入一个文件名,默认文件存在,实现这个文件的下载

循环读取输入的文件,把读取的数据存到另一个文件中

cpp 复制代码
#include <myhead.h>

int main(int argc, const char *argv[])
{
	//创建两个文件流指针
	FILE *srcfp=NULL,*destfp=NULL;

	//打开默认存在的文件并设置为只读模式
	srcfp=fopen("./file1","r");
	if(srcfp==NULL)
	{
		ERROR_MSG("fopen error");
	}
	
	//打开目标文件并设置为只写模式,不存在则创建,存在则覆盖文件
	destfp=fopen("./file2","w");
	if(destfp==NULL)
	{
		ERROR_MSG("fopen error");
	}

	//定义一个数组当缓存区
	char buf[1024]="";

	//循环读取源文件并写入目标文件
	while(fgets(buf,sizeof(buf),srcfp)!=NULL)
	{
		fputs(buf,destfp);
		bzero(buf,sizeof(buf));
	}
    
    fclose(srcfp); 
    fclose(destfp);   

	return 0;
}

运行结果:

2.输入一个文件名,默认这个文件存在的,计算文件有几行,多大字节?

cpp 复制代码
#include <myhead.h>

int main(int argc, const char *argv[])
{
	//定义一个文件流指针
	FILE *srcfp=NULL;
	
	//打开默认源文件并设置为只读模式
	srcfp=fopen("./file1","r");
	if(srcfp==NULL)
	{
		ERROR_MSG("fopen error");
	}
	
	//定义一个变量记录行数
	int line=0;
	//定义一个变量接收读取的字符以便判断
	char c;

	//循环读取
	while((c=fgetc(srcfp))!=EOF)
	{
		if(c=='\n')
			line++;
	}
	printf("文本有%d行。\n",line);

	//定义一个变量接收文件字节大小
	int size=0;
	size=ftell(srcfp);
	printf("文本一共%d字节。\n",size);

    fclose(srcfp); 

	return 0;
}

运行结果:

3.牛客网理论

相关推荐
EnglishJun2 分钟前
ARM嵌入式学习(八)--- 汇编应用:点亮led
汇编·arm开发·学习
PNP Robotics2 分钟前
PNP机器人亮相第二届机器人灵巧手国际创新大会
人工智能·学习·机器人·开源
穷人小水滴4 分钟前
使用 WebRTC 实现局域网投屏: PC (GNOME ArchLinux) -> 平板 (Android)
android·linux·webrtc·浏览器·js·gnome·投屏
2501_918126915 分钟前
学习所有python写浏览器的语句
开发语言·python·学习
恋红尘6 分钟前
K8S 控制器-资源调度-叩丁狼
linux·docker·kubernetes
weixin_537590458 分钟前
《C程序设计语言》练习答案(练习1-7)
linux·c语言·算法
123过去2 小时前
ike-scan使用教程
linux·测试工具
疯狂吧小飞牛8 小时前
GPG基础指令
linux·服务器·网络
C++ 老炮儿的技术栈8 小时前
volatile使用场景
linux·服务器·c语言·开发语言·c++
AI科技星9 小时前
全尺度角速度统一:基于 v ≡ c 的纯推导与验证
c语言·开发语言·人工智能·opencv·算法·机器学习·数据挖掘