当前位置: 首页 > 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.dtcms.com/a/308080.html

相关文章:

  • 【0基础PS】Photoshop (PS) 理论知识
  • linux线程互斥和同步
  • 操作系统系统面试常问(内存、快表、相关知识)
  • 中欧建交50周年,中硼医疗领衔中意BNCT合作月,中国尖端技术出海欧洲
  • main函数,常量指针与指针常量,野指针等,void与void的区别
  • Kubernetes 应用部署实战:为什么需要 Kubernetes?
  • Apache Tomcat样例目录session操纵漏洞解读
  • Import Maps 实战指南:无需打包器,浏览器原生模块路径重映射!
  • python 检查带有标题行,以逗号为分隔符的文本文件
  • Vue 的双向数据绑定原理
  • 自我学习----绘制Mark点
  • 解决Pycharm内存一直升高卡死、反应慢、CPU占用高
  • 《通信原理》学习笔记——第六章
  • IntelliJ IDEA 的常用快捷键
  • Git 详细安装配置教程(Windows版)
  • 以微服务为基础搭建一套脚手架开始前的介绍
  • BGP高级特性之认证
  • python刷题关键记录【常用api使用方法总结,常用函数使用方法】
  • RHEL 8.10 离线安装 Ansible 完整教程
  • 网络基础——路由控制
  • iOS 类存储 与 C# 类存储 的差异
  • 正则化都是放在模型的哪个位置呢?
  • 系统讲解图片格式转换:为什么要转换、怎么转换
  • 数据治理:数字化时代的 “治” 与 “理” 之道 —— 破解企业数据资产困局
  • 【2025/07/31】GitHub 今日热门项目
  • 代码随想录day51图论2
  • Spring MVC体系结构和处理请求控制器
  • 图论:SPFA算法
  • 嵌入式操作系统快速入门(1):快速入门操作系统常见基础概念
  • CMake项目中如何按目录结构分离显示Header和Source文件