当前位置: 首页 > news >正文

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

IO的基本概念

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

文件IO

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

#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()等。

#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.输入一个文件名,默认文件存在,实现这个文件的下载

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

#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.输入一个文件名,默认这个文件存在的,计算文件有几行,多大字节?

#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.牛客网理论

 

http://www.lryc.cn/news/606569.html

相关文章:

  • 分布内侧内嗅皮层的层Ⅱ或层Ⅲ的网格细胞(grid cells)对NLP中的深层语义分析的积极影响和启示
  • 什么是数据集成?和数据融合有什么区别?
  • AI陪伴的发展现状
  • Linux应用开发基础知识——Makefile初级教程(九)
  • 20250731解决RK3588的AIOT参考设计刷机之后可以启动但是断电进MASKROM模式
  • Ⅹ—6.计算机二级综合题19---22套
  • flowable对已经部署的流程进行更新,不产生新版本
  • anaconda searchanaconda show | conda 检索包资源安装指定版本包指定源安装命令package
  • Java学习------Executor框架
  • 数据结构:多项式表示(polynomial representation)
  • 力扣 Pandas 挑战(6)---数据合并
  • 从零开始搞定类和对象(上)
  • Pycaita二次开发基础代码解析:曲面法线生成、零件加载与材料应用
  • stm32F407 实现有感BLDC 六步换相 cubemx配置及源代码(一)
  • MySQL 中的聚簇索引和非聚簇索引的区别
  • 【STM32】HAL库中的实现(一)GPIO/SysTick/EXTI
  • Cesium 快速入门(五)坐标系
  • 【JavaEE】(7) 网络原理 TCP/IP 协议
  • Python 环境配置
  • React的介绍和特点
  • 学习曲线之TS
  • 检索召回率优化探究二:基于 LangChain 0.3集成 Milvus 2.5向量数据库构建的智能问答系统
  • 结构体、共用体,位运算
  • MPU6050模块
  • 谷歌正在美国测试一项基于机器学习的年龄识别技术
  • 7月31日作业
  • Qt之CJSON:从基础到进阶的 JSON 数据处理指南
  • langchain--2--invoke、batch、stream、ainvoke、abatch、astream
  • 远程仓库地址发生变化
  • HTTP性能优化实战