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