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

相关推荐
---学无止境---26 分钟前
Linux中系统调用sys_symlink和sys_unlink函数的实现
linux
行者游学34 分钟前
ETCD 学习使用
数据库·学习·etcd
代码程序猿RIP35 分钟前
【Etcd 】Etcd 详解以及安装教程
linux·数据库·etcd
tb_first1 小时前
Linux入门1(2/2)
linux
cellurw2 小时前
Day72 传感器分类、关键参数、工作原理与Linux驱动开发(GPIO/I²C/Platform/Misc框架)
linux·c语言·驱动开发
Python私教2 小时前
Unity 游戏开发「工业化级」学习路线 2025 版
学习·unity·游戏引擎
charlie1145141912 小时前
2D 计算机图形学基础速建——2
笔记·学习·线性代数·教程·计算机图形学
NextZeros2 小时前
基于CentOS安装LNMP
linux·centos
梁萌2 小时前
Linux安装mysql8.4.6
linux·运维·mysql安装·8.4.6
gtr20202 小时前
Ubuntu24.04 无法读取 U盘
linux