当前位置: 首页 > news >正文

Linux FILE文件操作2- fopen、fclose、fgetc、fputc、fgets、fputs验证

目录

 1.fopen 打开文件

1.1 只读打开文件,并且文件不存在

1.2 只写打开文件,并且文件不存在

1.3 只写打开文件,并且文件存在,且有内容

1.4 追加只写打开文件,并且文件不存在

2. fclose 关闭文件

3. fgetc 读取一个字符

4.fputc 写入一个字符

5.fgets 从文件中读取一行字符串

(1)读取的字节数小于文件一行内容,提前结束读取

(2)读取的字节数小于文件一行内容,提前结束读取

6.fputs 向文件写入一个字符串


 1.fopen 打开文件

函数原型:

/* 功能:创建或者打开一个文件
参数:
path:文件名,如果只写文件名,默认就是当前路径,也可以添加路径
mode:文件权限
r 只读打开:如果文件不存在则报错,文件存在只读打开
r+ 读写打开,如果文件不存在则报错,文件存在读写打开
w 只写打开,如果文件不存在则创建;如果文件存在则清空,只写打开;
w+ 读写打开,如果文件不存在则创建;如果文件存在则清空,读写打开
a 追加只写打开,如果文件不存在则创建;如果文件存在直接追加,只写打开
a+ 追加读写打开,如果文件不存在则创建;如果文件存在则追加读写打开

 返回值:
 成功:文件指针
 失败:NULL */
FILE *fopen(const char *path, const char *mode);

1.1 只读打开文件,并且文件不存在

程序:

#include <stdio.h>

int test1()
{
	//使用fopen函数打开或者创建文件,返回文件指针
    FILE *fp = NULL;
	//以只读的方式打开文件,如果文件不存在则报错
    fp = fopen("./file.txt", "r");
     if(fp == NULL)
    {
        printf("fail to fopen\n");
        return -1;
    }

    //使用fclose关闭文件
    fclose(fp);
}

int main(int argc, char *argv[])
{
    test1(fp);
	
    return 0;
}

运行结果:

1.2 只写打开文件,并且文件不存在

程序:

#include <stdio.h>

int test2()
{
	//使用fopen函数打开或者创建文件,返回文件指针
    FILE *fp = NULL;
	 //以只写的方式打开文件,如果文件不存在则创建,如果文件存在清空
    fp = fopen("./file.txt", "w");
     if(fp == NULL)
    {
        printf("fail to fopen\n");
        return -1;
    }
    
    //使用fclose关闭文件
    fclose(fp);
}

int main(int argc, char *argv[])
{    
    test2();

    return 0;
}

运行结果:

1.3 只写打开文件,并且文件存在,且有内容

程序:与3.2只写打开文件,并且文件不存在,程序相同

运行结果:

1.4 追加只写打开文件,并且文件不存在

程序:

#include <stdio.h>

int test3()
{
	//使用fopen函数打开或者创建文件,返回文件指针
    FILE *fp = NULL;
	//以只写的方式打开文件,如果文件不存在则创建,文件存在则追加
    fp = fopen("./file.txt", "a");
   
     if(fp == NULL)
    {
        printf("fail to fopen\n");
        return -1;
    }
    
    //使用fclose关闭文件
    fclose(fp);
}

int main(int argc, char *argv[])
{
    
    test3();

    return 0;
}

运行结果:

2. fclose 关闭文件

/*
功能:关闭一个文件指针,无法在对当前文件进行操作
参数:
stream:指定的文件指针,fopen函数的返回值

返回值:
成功:0
失败:EOF

注意:注意一个文件只能关闭一次,不能多次关闭。
关闭文件之后就不能再文件指针对文件进行读写等操作了。
*/
int fclose(FILE *stream);

程序:见fopen 打开文件,程序最后。

3. fgetc 读取一个字符

函数原型:

 /* 功能:从文件指针标识的文件中读取一个字符
 参数:stream:指定的文件指针

 返回值:
 成功:读取的字符
 失败:EOF
 如果文件读取完毕,也会返回EOF */

int fgetc(FILE *stream);

程序:

#include <stdio.h>

int test1()
{
	 FILE *fp = NULL;
    fp = fopen("./file.txt", "r");
    if(fp == NULL)
    {
        printf("fail to fopen\n");
        return -1;
    }
    
    //使用fgetc从文件中读取一个字符
   int c = fgetc(fp);
    printf("c = [%c] - %d\n", c, c);
    printf("test1 end \n");
}

int main(int argc, char *argv[])
{
    FILE *fp = NULL;
    fp = fopen("./file.txt", "r");
    if(fp == NULL)
    {
        printf("fail to fopen\n");
        return -1;
    }

    //文件的每一行结束的位置都有一个标识,是一个换行符,称之为行结束符
    //fgetc可以读取到行结束符
    int c;
    while((c = fgetc(fp)) != EOF)
    {
        printf("c = [%c] - %d  ", c, c);
    }

	printf(" \ntest1 start \n");
	test1();

    return 0;
}

运行结果:

4.fputc 写入一个字符

函数原型:

 /* 功能:向文件指针标识的文件中写入一个字符
 参数:
 c:要写入的字符
 stream:指定的文件指针

 返回值:
 成功:要写入的字符
 失败:EOF */
int fputc(int c, FILE *stream);

程序:

#include <stdio.h>

int test1()
{
	FILE *fp = NULL;
	//只写打开./file.txt,不存在则创建文件,文件存在则清空
    fp = fopen("./file.txt", "w");
    if(fp == NULL)
    {
        printf("fail to fopen\n");
        return -1;
    }

	int i;
   //通过fputc函数向文件写入一个字符
    i = fputc('h', fp);
    i = fputc('e', fp);
    i = fputc('l', fp);
    i = fputc('\n', fp);
    i = fputc('l', fp);
    i = fputc('o', fp);
    if(i ==  EOF)
    {
	printf("fail to fputc\n");
	return -1;
    	}

	return 0;
}

int main(int argc, char *argv[])
{
   
	test1();
    return 0;
}

运行结果:

5.fgets 从文件中读取一行字符串

函数原型:

 /* 功能:从文件中读取内容
参数:
s:保存读取到的内容
size:每次读取的最大个数
stream:文件指针

返回值:
成功:读取的数据的首地址
失败:NULL
 如果文件内容读取完毕,也返回NULL

 注意:从stream所指的文件中读取字符,在读取的时候碰到换行符或者是碰
 到文件的末尾停止读取,或者是读取了size‐1个字节停止读取,在读取
 的内容后面会加一个\0,作为字符串的结尾 */
char *fgets(char *s, int size, FILE *stream);

(1)读取的字节数小于文件一行内容,提前结束读取

程序:

#include <stdio.h>

//fgets读取的字节数大于文件一行内容,碰到 换行符 \n 提前结束读取
int test1() 
{
	FILE *fp = NULL;
    fp = fopen("./file.txt", "r");
    if(fp == NULL)
    {
        printf("fail to fopen\n");
        return -1;
    }

    //使用fgets读取文件内容
    //fgets每次读取时最多读取文件一行内容,只要遇到行结束符就立即返回
   char buf[32] = {0};
   
   //从fp里读取32个字节到buf
    fgets(buf, 32, fp);
    printf("buf = %s\n", buf);
    printf("test1 end \n");
}


int main(int argc, char *argv[])
{
 
	printf("test1 start \n");
	test1();
    return 0;
}

运行结果:

(2)读取的字节数小于文件一行内容,提前结束读取

程序:

#include <stdio.h>

//fgets读取的字节数小于文件一行内容,提前结束读取 
int test2() 
{
	FILE *fp = NULL;
	//file.txt内容 0123459789abcdefghijABCDEFGHIJ
    fp = fopen("./file.txt", "r");
    if(fp == NULL)
    {
        printf("fail to fopen\n");
        return -1;
    }

    //使用fgets读取文件内容
    //fgets每次读取时最多读取文件一行内容,只要遇到行结束符就立即返回
   char buf[32] = {0};
   
   //从fp里读取15个字节到buf
    fgets(buf, 15, fp);
    printf("buf = %s\n", buf);
    printf("test2 end \n");
}

int main(int argc, char *argv[])
{
 
	printf("test2 start \n");
	test2();
    return 0;
}

运行结果:

6.fputs 向文件写入一个字符串

函数原型:

 /* 功能:向文件写入数据
 参数:
 s:要写入的内容
 stream:文件指针

 返回值:
 成功:写入文件内容的字节数
 失败:EOF */
int fputs(const char *s, FILE *stream);

程序:

#include <stdio.h>

int main(int argc, char *argv[])
{
    FILE *fp = NULL;
    fp = fopen("./file.txt", "w");
    if(fp == NULL)
    {
        printf("fail to fopen\n");
        return -1;
    }

    //通过fputs函数向文件写入数据
    fputs("0123459789\n", fp);
    fputs("ABCDEFGHIJ", fp);
    fputs("9876543210", fp);

    return 0;
}

运行结果:

file.txt内容:

相关文章:

  • Java 大视界 -- Java 大数据机器学习模型的对抗攻击与防御技术研究(137)
  • 【嵌入式】复刻SQFMI开源的Watchy墨水屏电子表——(2)软件部分
  • Git 的使用上传下载和更新
  • 【数学 线性代数】差分约束
  • Python----计算机视觉处理(Opencv:图像颜色替换)
  • 三维重建(十七)——obj文件解读+ply文件解读
  • 搞了搞Python,写了个图片对比程序及AI硅基流动对话
  • BFF与API Gateway的区别解析
  • Socket 、WebSocket、Socket.IO详细对比
  • Dify 搭建
  • 智能汽车图像及视频处理方案,支持视频智能包装创作能力
  • koupleless 合并多个微服务应用到一个应用实例(包含springcloud gateway)
  • w259交通管理在线服务系统设计与实现
  • Nginx限流与鉴权(Nginx Traffic Limiting and Authentication)
  • JS逆向:泛微OA的前端密码加密逆向分析,并使用Python构建泛微OA登录
  • [023-01-47].第47节:组件应用 - GetWay与 Sentinel 集成实现服务限流
  • 3.17学习总结 java数组
  • Compose 实践与探索十四 —— 自定义布局
  • 第四章 搜索基础
  • python项目一键加密,极度简洁
  • 上海营商环境的“分寸”感:底线之上不断拓宽自由,底线之下雷霆制止
  • 民生访谈|摆摊设点、公园搭帐篷、行道树飘絮,管理难题怎么解?
  • 马上评|演出服“穿过就退货”的闹剧不该一再重演
  • 重磅金融政策密集发布!一文梳理这场国新办发布会
  • 线下无理由退货怎样操作?线上线下监管有何不同?市场监管总局回应
  • 世界哮喘日|专家:哮喘无法根治,“临床治愈”已成治疗新目标