linux系统调用——文件操作(二)

本文详细介绍了文件输入输出操作的基本概念和技术,包括fopen、fclose等函数的使用方法及注意事项,通过实例展示了如何进行文件读写操作。

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

带缓存的I/O操作
标准的I/O库提供缓冲的目的是尽可能地减少使用read和write的调用次数,它也是对每个I/O流自动的缓冲管理,从而避免应用程序需要考虑这一点所带来的的麻烦,不幸的是,标准I/O库最令人迷惑的也是缓冲

fopen函数
fopen函数用于打开文件
fopen函数使用说明

表头文件#include <stdio.h>
定义函数FILE *fopen(const char *pathname,const char *mode)
函数说明参数 path是将要打开的文件路径,参数mode字符串则代表着流形态,mode有下面几种字符串 ,R:打开只读文件,这个文件必须存在, r+:打开可读写文件,这个文件必须存在,w :打开只写文件,若文件长度为0,则文件内容消失,w+:打开可读写文件,如果文件长度为0,则文件内容清空,文件不存在则创建,a : 以附加方式打开只写文件,文件存在,写入的数据会加到文件尾,不存在则建立,a+ : 以附加的方式打开可读写文件,存在则写到文件尾,不存在则穿件。在上面几个字符串中加个b,如ab,ab+,意思是以二进制的方式打开文件
返回值文件顺利打开后,指向该流的文件指针会被返回,若文件打开失败,则返回NULL 并把错误代码存在error中
附加说明一般而言,开文件后会 作一些文件读取或写入动作,若文件打开失败,接下来的读写动作无法进行,所以要对fopen进行错误判断处理

fclose函数
fclose函数用来关闭文件
fclose函数使用说明

表头文件#include <stdio.h>
定义函数int fclose(FILE *stream)
函数说明fclose()函数用来关闭fopen()打开的文件,此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源
-返回值-成功返回0,不成功则返回EOF,并把错误代码存到error中
错误代码EBADF表示参数stream非以打开的文件

fdopen函数
fdopen函数用于将文件描述词转为文件指针
fdopen函数说明

表头文件#include <stdio.h>
定义函数FILE *fdopen(int fildes,const char *mode)
函数说明fdopen()会将参数fildes的文件描述词转换为对应的文件指针后返回,参数mode字符串代表着文件指针的流形态,此形态必须和原来的文件描述词读写模式一样
返回值转换成功时返回指向流针的文件指针,失败返回NULL,并把错误代码存在error中

例如

#include <stdio.h>
int main ()
{
      FILE *fp = fdopen(0,"w+") ;
      fprintf (fp,"s%\n","hello”);
      fclose(fp);
 }

fread函数
fread函数用于从文件流读取数据
fread使用说明

表头文件#include <stdio.h>
定义函数fread(void *ptr,size_t size , size_t nmemb,FILE *stream)
函数说明fread()用来从文件流中读取数据,参数stream为以打开的文件指针,参数ptr指向欲存放读取进来的数据空间,读取的字符数由参数size *nmemb来决定的,fread()会返回实际读到的nmemb数目,如果此值参数比nmemb小,则代表可能读到文件尾或有错误发生,这时必须用feof()和ferror()来判断发生什么情况
返回值返回实际读取到的nmemb数目

fwrite函数
fwrite函数用于将数据写到文件流
fwrite函数使用说明

表头文件#include <stdio.h>
定义函数fread(void *ptr,size_t size , size_t nmemb,FILE *stream
函数说明fwrite()用来将数据写入文件流,参数steam为以打开的文件指针,参数ptr指向欲写入的数据地址,总共写入的字符数由参数size*nmemb来决定的,fwrite()会返回实际写入的nmemb数目
返回值返回实际写入的nmemb数目-

fseek函数
fseek函数用于移动文件流的读写位置
fseek函数使用说明

表头文件#include<stdio.h>
函数定义int fseek(FILE *stream ,long offset ,int whence)
函数说明fseek()用来移动文件流的读写位置,参数stream为已打开的文件指针,参数offset为根据参数whence来移动 读写位置的位移数,参数whence为下列其中的一种:SEEK_SET从距文件开头offset位移量为新的读写位置:SEEK_CUR以目前的读写位置往后增加offset个位移量:SEEK_END将读写位置指向文件尾在增加offset个位移量
返回值当调用成功时返回0,错误返回-1,并把错误返回error中

fgetc函数
fgetc函数用于从文件中读取一个字符
fgetc函数使用说明

表头文件#include<stdio.h>
定义函数int fgetc(FILE *stream)
函数说明fgetc()用来从参数stream所指的文件中读取一个字符,若读到文件尾而无数据时便返回EOF
返回值fgetc()返回读取到的字符,若返回EOF则表示到了文件尾

fputc函数
fputc函数用于将指定字符写入文件流中
fputc函数使用说明

表头文件#include<stdio.h>
定义函数int fputc(int c,FILE *stream)
函数说明fputc函数将参数c转换成unsigned char 后写入参数stream指定的文件中
返回值返回写入成功的字符,即参数c:若返回EOF则代表写入失败-

用例说明实现在text1.txt和text2.txt文件中除去首行和末尾对应的数据,要求三个文本内容如下:

   text1                  text2                      text3
   begin                  begin                      begin
   10 11 12               15 16 17                   25 27 29
   20 21 22               25 26 27                   45 47 49
   30 31 32               35 36 37                   65 67 69
   end                    end                        end

#include<stdio.h>
#include <string.h>
#include <stdlib.h>
 
 int main ()
 {
 FILE *fp1,fp2,fp3 ;
 char ch1 ;
 char ch2;
 char ch3 ;
 int sum ;
 int temp1 = 0,temp2 = 0 ;
if ((fp1 = fopen("t1","r")) == NULL)
{
      printf ("打不开t1文件\n") ;
      exit(1) ;
  }
 if ((fp2 = fopen("t2","r")) == NULL)
{
      printf ("打不开t2文件\n") ;
      exit(1) ;
  }
  if ((fp1 = fopen("t3","w+")) == NULL)
{
      printf ("打不开t3文件\n") ;
      exit(1) ;
  } ```
while (((ch1 = fgetc(fp1)) != EOF) && (ch2 = fgetc(fp2)) !=EOF)
{
     if (ch1<'0' ||ch1>'9')
     {
          fput(ch1,fp3) ;
       }
       else
       {
           temp1 = ch1 - '0' ;
            temp2 = ch2 - '0' ;
            sum = temp1 + temp2 ;
            ch3 = sum + '0' ;
            fputc (ch3,fp3) ;
        }
     }
            return 0;
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值