Linux应用开发——文件操作(c标准库)

本文详细介绍了C语言中利用fopen、fread、fwrite、fclose、fseek和fflush进行文件操作的方法,包括文件打开模式、数据读写、流定位及缓冲控制,通过一个实例演示了实际应用过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux应用开发——文件操作(c标准库)

本说明介绍C标准库提供的常用文件操作函数:fopen、fread函数、fwrite函数、fclose函数、fflush函数、fseek函数。

1. fopen函数

函数原型:

#include <stdio.h>
FILE *fopen(const char *pathname, const char *mode);

用法:

​ 用于打开或者创建文件,并且返回相应的文件流。

参数说明:

  • pathname:用于指定要打开或创建的文件名

  • mode:用于文件的打开方式,该参数是字符串,输入时需要带双引号,如“r”。

  • “r”:以只读的方式打开,指针于文件的开头。

  • “r+”:以读和写的方式打开,指针于文件开头。

  • “w”:以写方式打开,并清空文件内容,指针于文件开头。

  • “w+”:内容同上,当文件不存在时,“w”模式会返回错误,而“w+”会创建新文件。

  • “a”:以追加的方式打开文件,指针于文件末尾。

  • “a+”:以读和写的方式打开,其他同上。

  • fopen:的返回值是FILE类型的文件流,当它的值不为NULL时表示正常。

2. fread函数

函数原型:

#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

用法:

​ 用于从文件流中读取数据。返回值为成功读取的项数(项的单位为size)

参数说明:

  • stream:是使用fopen打开的文件流

  • nmemb:表示有多少项数据。

  • size:项目的大小。

3. fwrite函数

函数原型:

#include <stdio.h>
size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream);

用法:

​ 用于把数据写入文件流中。返回值为成功写入的项数(项的单位为size)

参数说明:

  • stream:是使用fwrite打开的文件流
  • nmemb:表示有多少项数据。
  • size:项目的大小。

4. fclose函数

函数原型:

#include <unistd.h>
int close(int fd);

用法:

​ 用于关闭指定的文件流,因为标准库会对数据进行缓冲,关闭时它会把未写到文件的内容都写出。

5. fseek函数

函数原型:

#include <stdio.h>
int fseek(FILE *stream, long offset, int whence);

用法:

​ 用于设置下一次读写函数操作的位置。

参数说明:

offset参数用于指定位置,whence参数定义了offset的意义,whence的可取值如下:

  • SEEK_SET:offset是一个绝对位置。

  • SEEK_END:offset是以文件尾为参考点的相对位置。

  • SEEK_CUR:offset是以当前位置为参考点的相对位置。

6. fflush函数

函数原型:

#include <stdio.h>
int fflush(FILE *stream);

用法:

​ 用于把尚未写到文件的内容立即写出。常用于确保前面的操作的数据被写入到磁盘上。fclose函数本身也包含了fllush的操作。

7.实验代码分析

#include <stdio.h>
#include <string.h>

//要写入的字符串
const char buf[] = "filesystem_test:Hello World!\n";
//文件描述符
FILE *fp;
char str[100];


int main(void)
{
   //创建一个文件
   fp = fopen("filesystem_test.txt", "w+");
   //正常返回文件指针
   //异常返回NULL
   if(NULL == fp){
      printf("Fail to Open File\n");
      return 0;
   }
   //将buf的内容写入文件
   //每次写入1个字节,总长度由strlen给出
   fwrite(buf, 1, strlen(buf), fp);

   //写入Embedfire
   //每次写入1个字节,总长度由strlen给出
   fwrite("Embedfire\n", 1, strlen("Embedfire\n"),fp);

   //把缓冲区的数据立即写入文件
   fflush(fp);

   //此时的文件位置指针位于文件的结尾处,使用fseek函数使文件指针回到文件头
   fseek(fp, 0, SEEK_SET);

   //从文件中读取内容到str中
   //每次读取100个字节,读取1次
   fread(str, 100, 1, fp);

   printf("File content:\n%s \n", str);

   fclose(fp);

   return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值