linux下的文件输入输出fgetc、fputc,fgets、fputs,fread、fwrite

我们平时在对一个文件进行操作的时候会进行如下步骤:

  1. 打开文件;
  2. 对文件进行操作(一般我们是进行读写操作);
  3. 关闭文件:

下面我们就围绕linux操作系统中,对一个文件的操作进行简单讲解

打开文件

使用 <stdio.h>头文件中的==fopen()==函数即可打开文件,它的用法为

FILE *fopen(const char *path, const char *mode);

path 为文件路径(包括文件名);mode 为打开方式,两个都是字符串,也就是我们输入的时候都是带双引号的;FILE 为一个结构体,用来保存文件信息。

打开方式

在这里插入图片描述
注意:调用fopen()函数时,必须指明打开权限,但可以不指名读写方式(默认为“”t“”)

文件的读写

以字符形式读写文件

fgetc()
 int fgetc(FILE *fp);

fp 为文件指针。fgetc()读取成功时返回读取到的字符,读取到文件末尾或者读取失败时返回EOF(一般我们认为EOF和-1等价,所以这里返回值是int类型)。
用法:

#include <stdio.h>

char ch=0;
FILE *fp=fopen("/home/farsight/Desktop/a.txt","r+");
ch=fgetc(fp);

printf("%c\r\n",ch);

注意:当读取到EOF时,如何区分是读到文件末尾还是文件出错。此时需要用到两个函数 foef()和 ferror()。

// feof()函数:当到达文件末尾时返回非零值,否则返回零值;
int feof(FILE *fp);
// ferror()函数:出错时返回非零值,否则返回零值;
int ferror(FILE *fp);
fputc()
int fputc(int c, FILE *fp);

c 为要写入的字符,fp为文件指针。fputc()写入成功时返回写入的字符,失败时返回EOF。

#include <stdio.h>

char ch='a';
FILE *fp=fopen("/home/farsight/Desktop/a.txt","r+");
fputc(ch,fp);

【示例】:

 1 #include <stdio.h>
  2 //读函数
  3 void read(FILE *fp)
  4 {
  5     char ch=0;
  6     while(ch=fgetc(fp)!=EOF)
  7     {
  8         printf("%c\r\n",ch);
  9     }
 10 
 11    if(feof(fp))
 12     printf("文件到达末尾\r\n");
 13     else
 14     printf("文件出错\r\n");
 15 }
 16 
 17 //写函数
 18 void write(FILE *fp)
 19 {
 20     char ch=0;
 21     ch=getchar();
 22     fputc(ch,fp);
 23     fputc('\n',fp);
 24 }
 25 int main()
 26 {
 27     FILE *fp;
 28     fp=fopen("/home/farsight/Desktop/a.txt","r+");
 29     if(fp==NULL)
 30     {
 31         perror("open file error\n\r");
 32         return -1;
 33     }
 34     read(fp);
 35     write(fp);
 36     fclose(fp);
 37     return 0;
 38 }     

【结果】:
在这里插入图片描述
在这里插入图片描述
一般我们对文件操作时,很少以字符为单位进行操作,所以,大家掌握它的用法就可以了,不用管怎么存。

以行形式读写文件

fgets()
char *fgets(char *str, int size, FILE *fp);

str为字符数组,size为要读取得字符数目,fp为文件指针。
读取成功时返回字符数组首地址,读取失败时返回NULL;如果开始读取时,文件指针就在文件末尾,也返回NULL。

#define N 100

char str[N+1]={0};
FILE *fp=fopen("/home/farsight/Desktop/a.txt","r+");
fgets(str,sizeof(str),fp);

printf("%s\r\n",str);
fputs()
int fputs(const char *str, FILE *fp);

str为要写入的字符串,fp为文件指针。写入成功返回非负数,写入失败返回EOF。
【示例】:

 1 #include <stdio.h>
  2 
  3 int main()
  4 {
  5     int ret=0;
  6     FILE *fp=fopen("/home/farsight/Desktop/source/a.txt","r+");
  7     if(fp==NULL)
  8     {
  9         printf("打开文件失败\r\n");
 10     }else{
 11         printf("打开文件\r\n");
 12          }
 13 
 14     char str[100]="hello C is the best language";
 15     char arr[100]={0};
 16     if(ret=fputs(str,fp)!=EOF)
 17     {
 18         puts("写入成功");
 19     }
 20     else
 21     {
 22         puts("写入失败");
 23     }
 24     
 25     FILE *fq=fopen("/home/farsight/Desktop/source/b.txt","r+");
 26     fgets(arr,sizeof(arr),fq);
 27     printf("%s",arr);
 28     
 29     fclose(fp);
 30     fclose(fq);
 31     return 0;
 32     
 33 }

【结果】:
在这里插入图片描述

关闭文件

当我们操作完文件后,应该使用==fclose()==函数关闭文件,以释放相关资源,避免数据丢失。用法为:

int fclose(FILE *fp);

fp为文件指针,就是fopen()函数的返回值;文件正常关闭时,返回为0,如果返回非零值则表示有错误发生。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章