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

相关推荐
用户6120414922135 分钟前
C语言做的区块链模拟系统(极简版)
c语言·后端·敏捷开发
Lethehong10 分钟前
在 CentOS 7 上搭建 OpenTenBase 集群:从源码到生产环境的全流程指南
linux·运维·centos·tdsql·opentenbase·腾讯云数据库
Hard but lovely16 分钟前
vim的使用
linux·编辑器·vim
草莓熊Lotso25 分钟前
【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day12
c语言·开发语言·c++·刷题
知白守黑2671 小时前
KVM虚拟化
linux·运维·架构·centos
励志五个月成为嵌入式糕手1 小时前
0820 SQlite与c语言的结合
c语言·oracle·sqlite
G_H_S_3_2 小时前
【网络运维】Linux 文本搜索利器: grep命令
linux·运维·网络·操作文本
Duo1J3 小时前
【OpenGL】LearnOpenGL学习笔记15 - 面剔除
笔记·学习·图形渲染
C语言不精5 小时前
合宙780E开发学习-Lua语法学习
学习·junit·lua
壹Y.11 小时前
非线性规划学习笔记
学习·数学建模