大家好,我是极客范的本期栏目编辑小友,现在为大家讲解学会用Linux C文件读写函数问题。
C标准库提供的用于读写文件的函数非常多,大多数函数都在stdio.h中声明。
fread/fwrite、fgets/fputs、fgetchar/fputchar、fprintf/fscanf .
这些函数原型声明都在stdio.h中,如下:
size_t fread(void *ptr,size_t size,size _ t nmemb,FILE * stream);
size_t fwrite(const void *ptr,size_t size,size _ t nmemb,FILE * stream);
int fgetc(FILE * stream);
char *fgets(char *s,int大小,FILE * stream);
int getc(FILE * stream);
int getchar(void);
int ungetc(int c,FILE * stream);
无论是写入文件还是从文件流流中读取,都要先打开文件,完成后还要将打开的文件关闭。
为了防止指针变成野指针,还应将文件指针指向空。
文件* fopen(常量字符*路径名,常量字符*模式);
文件*fdopen(int fd,const char *模式);
文件*文件打开(常量字符*路径名,常量字符*模式,FILE *流);
fopen函数的安全版本是fopen _ s(FILE *流,char *文件名,char *模式),使用之前要将宏
fileutil.h
#ifndef __FILEUTIL_H
#define __FILEUTIL_H
#包括
FILE * open _ FILE(常量字符*文件,常量字符*模式);
无效读取0(常量字符*文件);
无效读取1(常量字符*文件);
无效读数2(常量字符*文件);
无效写入1(常量字符*文件);
#endif
fileuTIl.c
/*
*=====================================================================================
*文件名:文件
*描述:
*版本:1.0
*创建时间:2017年年04月13日09时38分23秒
*修订:无
*编译器:海湾合作委员会
*作者:您的姓名(),
*组织:
*=====================================================================================
*/
#包括
#包括
#包括
#包括"fileutil.h"
文件*
open _ file(const char *文件,常量字符*模式)
{
文件* fp
if(!(fp=fopen(文件,模式))){ 0
佩罗(”打开文件错误");
出口(-1);
}
返回FP;
}
无效读取0(常量字符*文件)
{
FILE *fp=open_file(文件,“r”);
char buf[BUFSIZ]={ 0 };
无符号长t=0;
//int tmp=fread(buf,1,20,FP);
//printf("read %d字节\n",tmp);
//printf("从%s读取buf是%s\n”,文件,buf);
while((t=fread(buf,1,192,fp))!=0){
printf("%s\n",buf);
bzero(buf,sizeof(buf));
}
if(fclose(fp)!=0) perror("关闭文件错误");
}
无效读取1(常量字符*文件)
{
FILE *fp=open_file(文件,“r”);
char * buf
size _ t n=0;
while((n=getline(buf,n,fp))!=(size _ t)-1){ 0
printf("%s",buf);
bzero(buf,sizeof(buf));
}
//if(buf)free(buf);
if(fclose(fp)!=0) perror("关闭文件错误");
}
无效读数2(常量字符*文件)
{
FILE *fp=open_file(文件,“r”);
char buf[BUFSIZ]="";
while(fgets(buf,BUFSIZ,FP)){ 0
printf("%s",buf);
bzero(buf,BUFSIZ);
}
if(fclose(fp)!=0) perror("关闭文件错误");
}
无效写入1(常量字符*文件)
{
FILE *fp=open_file(文件,“一个t”);
if(fclose(fp)!=0) perror("关闭文件错误");
}