嵌入式开发学习———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.牛客网理论

相关推荐
WSSWWWSSW25 分钟前
vi/vim跳转到指定行命令
编辑器·vim·excel
淮北4941 小时前
STL学习(十一、常用的算数算法和集合算法)
c++·vscode·学习·算法
Doris_LMS3 小时前
在Linux下安装nginx(保姆级别)
linux·运维·nginx·centos
超級二蓋茨4 小时前
在 CentOS 上安装 FFmpeg
linux·ffmpeg·centos
_Kayo_4 小时前
VUE2 学习笔记14 nextTick、过渡与动画
javascript·笔记·学习
obboda6 小时前
Linux基础复习:字符输入与输出
linux·运维·服务器
哪 吒6 小时前
OpenAI放大招:ChatGPT学习模式上线,免费AI智能家教
人工智能·学习·ai·chatgpt·gemini·deepseek
*wj7 小时前
【linux驱动开发】Vscode + Remote SSH + clangd + bear=内核源码阅读环境搭建
linux·驱动开发·vscode
AI视觉网奇7 小时前
语音识别dolphin 学习笔记
笔记·学习
killer Curry7 小时前
B站 XMCVE Pwn入门课程学习笔记(6)
笔记·学习