modeopen和fopen的区别
fopen、fread、fwrite的使用
(1)fopen
FILE *fopen(const char *path, const char *mode);path:文件路径
mode:以什么权限打开,要用双引号
它的返回值并不是文件描述符
若失败返回NULL
若操作成功返回FILE指针
操作方式和文件描述符类似
(2)fwrite
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
ptr: 表示缓冲区
size: 代表一条记录的长度
nmemb: 代表写入长度的个数
stream: 表示要写入哪个文件(已打开文件的指针,一般就是fopen的返回值)
返回值:读或写的记录数,成功时返回的记录数等于 nmemb,出错或读到文件末尾时返回的记录数小于 nmemb,也可能返回 0。
(3)fread
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);ptr: 表示缓冲区
size: 代表一条记录的长度
nmemb: 代表写入长度的个数
stream: 表示要写入哪个文件(已打开文件的指针,一般就是fopen的返回值)
返回值:Fread()会返回实际读取到的nmemb数目,
也可能返回0,如果此值比参数nmemb 来得小,则代表可能读到了文件尾或有错误发生,
这时必须用feof()或ferror()来决定发生什么情况。
(4)fseek
int fseek(FILE *stream, long offset, int whence);
//用法和lseek类似,作用定位光标
代码示例
#include <stdio.h>
#include<string.h>
int main()
{FILE*fp;char*str="I am handsome";char readbuf[128]={0};fp=fopen("./feng.txt","w+");fwrite(str,sizeof(char),strlen(str),fp);fwrite(str,sizeof(char)*strlen(str),1,fp);fseek(fp,0,SEEK_SET);fread(readbuf,sizeof(char),strlen(str),fp);printf("read sata:%s\n",readbuf);return 0;
}
标准c库写结构体到文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
struct text
{int a;char c;
};
int main()
{FILE*fp;struct text data={100,'a'};struct text data2;fp=fopen("./file1","w+");//"./file1" is wenjianlujingint n_write=fwrite(&data,sizeof(struct text),1,fp);//write return zijie de changdufseek(fp,0,SEEK_SET);int n_read=fread(&data2,sizeof(struct text),1,fp);printf("read %d,context %c\n",data2.a,data2.c);fclose(fp);return 0;
}
文件其他函数讲解
(1)fputc
int fputc(int c, FILE *stream);
c: 整形数、字符、字符串
stream: 目标文件,将c写入到目标文件
(2)feof
int feof(FILE *stream);
作用:测试是否到达文件的尾巴,若没有则返回0,若到达则返回非0。
(3)fgetc
int fgetc(FILE *stream);
作用:将文件中的字符一个个读到返回的c中,然后再printf输出
代码演示
#include<stdio.h>
#include<string.h>
int main()
{FILE*fp;int i;char*str="I am handsome";int len=strlen(str);fp=fopen("./file1","w+");fputc('a',fp);for(i=0;i<len;i++){fputc(*str,fp);str++;}fclose(fp);return 0;
}
include<stdio.h>
#include<string.h>
int main()
{FILE*fp;char i;fp=fopen("./file1","r");while(!feof(fp)){i=fgetc(fp);printf("%c\n",i);}fclose(fp);return 0;}