目录
在学习C语言时,就接触过文件相关的操作,通过
fwrite
,
fread
等这样的读写接口将信息写入或读出文件。但这只是在用法上进行了学习,也就是只停留在了语言层面;那么C++,JAVA这些语言又是如何进行读写的呢?
如何让使用硬件资源这个话题曾在操作系统一文提到过,今天通过基础IO一文进行讲解。
IO:IO通常指的是数据的输入和输出过程。这包括从外部设备(如键盘、鼠标、显示器、打印机等)读取数据以及向这些设备写入数据
C语言文件IO
fwrite
fwrite是C语言标准库中的一个函数:用于将数据从内存中的缓冲区写入到文件流中。这个函数通常用于二进制文件的写操作,因为它不会对写入的数据进行任何形式的转换或格式化。
参数:
ptr
:指向要写入文件的内存缓冲区的指针。size
:每个数据项的大小(以字节为单位)。count
:要写入的数据项的个数。stream
:指向 FILE 对象的指针,表示目标文件流。
返回值: fwrite函数返回成功写入的数据项个数。如果返回值小于count,则表示发生了错误或到达了文件末尾(EOF)。
fwrite使用示例
int main()
{
//把a中的数据写到文件中
FILE* fp = fopen("test.txt", "w");
if (NULL == fp)
{
perror("fopen::test.txt");
return 1;
}
//二进制的写文件
const char*msg="hello Linux\n";
int cnt=5;
while(cnt--)
{
fwrite(msg, strlen(msg), 1, fp);
}
fclose(fp);
fp = NULL;
return 0;
}
fread
在C语言中,fread函数被用于从文件流中读取数据。它适用于二进制文件的读取,因为可以确保数据按照原始格式(即字节流)被读取,而不会受到任何格式转换的影响。
参数:
ptr
:这是一个指向内存的指针,用于存储从文件中读取的数据。size
:这代表每个数据单元的大小,单位是字节。count
:这表示你想要读取的数据单元的数量。stream
:这是一个指向FILE对象的指针,它代表了你要从中读取数据的文件流。
返回值:
fread返回成功读取的元素数量(不是字节数)。如果返回值小于count,则可能发生了错误或到达了文件末尾。
fread使用实示例
int main()
{
FILE* fp = fopen("test.txt", "r");
if (NULL == fp)
{
perror("fopen::test.txt");
return 1;
}
char buffer[5][64];//存放从文件中读取的内容。
int i=0;
while(1)
{
size_t rd = fread(buffer[i++], sizeof(buffer), 1, fp);//存放到二维数组中
if (rd<1)
{
break;
}
}
while(i--)
{
printf("%s",buffer[i]);//打印
}
fclose(fp);
fp = NULL;
return 0;
}
除此之外还有很多的读写及文件操作接口,这里简单进行汇总,具体使用请参考——C语言文件操作
文件操作函数 | 功能 |
---|---|
fopen | 打开文件 |
fclose | 关闭文件 |
fputc | 写入一个字符 |
fgetc | 读取一个字符 |
fputs | 写入一个字符串 |
fgets | 读取一个字符串 |
fprintf | 格式化写入数据 |
fscanf | 格式化读取数据 |
fwrite | 向二进制文件写入数据 |
fread | 从二进制文件读取数据 |
fseek | 设置文件指针的位置 |
ftell | 计算当前文件指针相对于起始位置的偏移量 |
rewind | 设置文件指针到文件的起始位置 |
ferror | 判断文件操作过程中是否发生错误 |
feof | 判断文件指针是否读取到文件末尾 |
默认打开的三个流
在C语言中,程序一运行起来,就会默认打开三个流:
stdin
- 标准输⼊流,在大多数的环境中从键盘输入stdout
- 标准输出流,大多数的环境中输出至显示器界面stderr
- 标准错误流,大多数环境中输出到显示器界面
正是默认打开了这三个流,使用scanf
、printf
等函数就可以直接进行输入输出操作的
scanf,fgets使用示例
int main()