标准C库对文件操作的引入

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    wenjianlujing
        int n_write=fwrite(&data,sizeof(struct text),1,fp);//write  return zijie de changdu
        fseek(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;

}
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页