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