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

Linux应用层学习——Day2(文件IO)

fopen

#include <stdio.h>int main(int argc,char const *argv[])
{// FILE *fopen (const char *__restrict __filename:字符串要打开的文件名称,// 	    const char *__restrict __modes:打开的模式// 1) r:只读模式,如果没有文件报错// 2) w:只写模式 如果文件存在则清空文件,如果不存在则创建新文件// 3) a:只追加写模式 如果文件存在则在末尾追加写 如果不存在则创建新文件// 4) r+: 读写模式 文件必须存在 写入是从头一个一个覆盖// 5) w+: 读写模式 如果不存在创建新文件// 6) a+:追加读写模式 如果文件存在则在末尾追加写 如果不存在则创建新文件// return FILE * 结构体指针 表示一个文件// 报错返回 NULLchar *filename = "io.txt";//创建filename指针变量,指向io.txtFILE * ioFile = fopen(filename,"r");//FILE是C语言标准库stdio.h中定义的一个结构体,用于数据缓存,创建一个结构体指针if(ioFile == NULL){printf("failed");}else {printf("sucess");}return 0;
}

Makefile

CC:=gccfopen_test: fopen_test.c-$(CC) -o $@ $^-./$@-rm ./$@

CC:=gcc的作用是把gcc变成变量CC,这样后面改只需要改一个CC
$@是目标文件的名称,就是fopen_test
$^代表所用依赖名,就是fopen_test.c、
-./$@执行文件
-rm ./$@删除文件
把读取模式换成写模式后,执行
在这里插入图片描述

fclose

#include <stdio.h>int main(int argc,char const *argv[])
{// FILE *fopen (const char *__restrict __filename:字符串要打开的文件名称,// 	    const char *__restrict __modes:打开的模式// 1) r:只读模式,如果没有文件报错// 2) w:只写模式 如果文件存在则清空文件,如果不存在则创建新文件// 3) a:只追加写模式 如果文件存在则在末尾追加写 如果不存在则创建新文件// 4) r+: 读写模式 文件必须存在 写入是从头一个一个覆盖// 5) w+: 读写模式 如果不存在创建新文件// 6) a+:追加读写模式 如果文件存在则在末尾追加写 如果不存在则创建新文件// return FILE * 结构体指针 表示一个文件// 报错返回 NULLchar *filename = "io.txt";//创建filename指针变量,指向io.txtFILE* ioFile = fopen(filename,"w");//FILE是C语言标准库stdio.h中定义的一个结构体,用于数据缓存,创建一个结构体指针if (ioFile == NULL){printf("failed打开文件失败\n");}else {printf("打开成功\n");}//int fclose (FILE *__stream);//FILE *__stream:需要关闭的文件//return:成功返回0 失败返回EOF(负数),通常关闭失败直接报错int result = fclose(ioFile);if (result == EOF){printf("关闭文件失败\n");}else if (result == 0){printf("关闭文件成功\n");}return 0;
}

Makefile也需要写一下

CC:=gccfopen_test: fopen_test.c-$(CC) -o $@ $^-./$@-rm ./$@fclose_test: fclose_test.c-$(CC) -o $@ $^-./$@-rm ./$@

fputc

一次输入一个字节

#include <stdio.h>int main(int argc,char const *argv[])
{// FILE *fopen (const char *__restrict __filename:字符串要打开的文件名称,// 	    const char *__restrict __modes:打开的模式// 1) r:只读模式,如果没有文件报错// 2) w:只写模式 如果文件存在则清空文件,如果不存在则创建新文件// 3) a:只追加写模式 如果文件存在则在末尾追加写 如果不存在则创建新文件// 4) r+: 读写模式 文件必须存在 写入是从头一个一个覆盖// 5) w+: 读写模式 如果不存在创建新文件// 6) a+:追加读写模式 如果文件存在则在末尾追加写 如果不存在则创建新文件// return FILE * 结构体指针 表示一个文件// 报错返回 NULLchar *filename = "io.txt";//创建filename指针变量,指向io.txtFILE* ioFile = fopen(filename,"w");//FILE是C语言标准库stdio.h中定义的一个结构体,用于数据缓存,创建一个结构体指针if (ioFile == NULL){printf("failed打开文件失败\n");}else {printf("打开成功\n");}//int fputc (int __c, FILE *__stream);//int __c:ASCII码对应的char//FILE *__stream :打开的一个文件//return: 成功返回char 失败返回 EOFint put_result = fputc(97,ioFile);if (put_result == EOF){printf("写入文件失败\n");}else{printf("写入%c成功\n",put_result);}//int fclose (FILE *__stream);//FILE *__stream:需要关闭的文件//return:成功返回0 失败返回EOF(负数),通常关闭失败直接报错int result = fclose(ioFile);if (result == EOF){printf("关闭文件失败\n");}else if (result == 0){printf("关闭文件成功\n");}return 0;
}

Makefile也需要写一下,要注意顺序,应该是先打开,然后写入,然后关闭

CC:=gccfopen_test: fopen_test.c-$(CC) -o $@ $^-./$@-rm ./$@fputc_test: fputc_test.c-$(CC) -o $@ $^-./$@-rm ./$@fclose_test: fclose_test.c-$(CC) -o $@ $^-./$@-rm ./$@

fputs

这里和fputc的区别就是fputs是输进去字符串的

    //int fputs (const char *__restrict __s, FILE *__restrict __stream);// const char *__restrict __s:需要写入的字符串//FILE *__restrict __stream:需要写入的文件//return:成功返回非负整数,一般是0和1 失败返回EOFint putsR = fputs("love letter\n",ioFile);if(putsR == EOF){printf("写入字符串失败\n");}else{printf("写入字符串%d成功\n",putsR);}

Makefile

CC:=gccfopen_test: fopen_test.c-$(CC) -o $@ $^-./$@-rm ./$@fputc_test: fputc_test.c-$(CC) -o $@ $^-./$@-rm ./$@fputs_test: fputs_test.c-$(CC) -o $@ $^-./$@-rm ./$@fclose_test: fclose_test.c-$(CC) -o $@ $^-./$@-rm ./$@

fprintf

    // fprintf (FILE *__restrict __stream, const char *__restrict __fmt, ...)//FILE *__restrict __stream:打开的文件 这次是先写要打开的文件//char *__restrict __fmt:带格式化的长字符串//...可变参数:填入格式化的长字符串//return: 成功返回写入的字符个数 不包含换行符 失败返回EOFchar *name = "叮咚鸡";int printfR = fprintf(ioFile,"这是输入的内容\n这里是第二行\n这里是最后一行\n \n\t\t %s",name);if(printfR == EOF){printf("字符串写入失败\n");}else{printf("字符串%d写入成功",printfR);}

Makefile

fprintf_test: fprintf_test.c-$(CC) -o $@ $^-./$@-rm ./$@	

fgetc

读取文件的单个字节
因为中文是按照utf-8编码,3个字节组成一个字,所以按照一个一个读取的方式,只能去读英文单个字符,但是如果只按照printf的方式去输出的话,是会出现乱码的,所以只能采取循环的形式去读

#include<stdio.h>int main(int argc,char const *argv[])
{FILE * ioFile = fopen("io.txt","r");if(ioFile == NULL){printf("无法读取此文件,文件不存在\n");}else{printf("已读取文件\n");}//int fgetc (FILE *__stream);//FILE *__stream:打开的文件//return:读取到的1个字节 如果没读取到或者是文件末尾则EOFchar c = fgetc(ioFile);while(c != EOF){   printf("%c",c);c = fgetc(ioFile);}printf("\n");int closeR = fclose(ioFile);if(closeR == EOF){printf("关闭文件失败\n");}else if(closeR == 1){printf("成功关闭文件\n");}return 0;
}

Makefile

fgetc_test: fgetc_test.c-$(CC) -o $@ $^-./$@-rm ./$@

http://www.mrgr.cn/news/76387.html

相关文章:

  • linux startup.sh shutdown.sh (kkFileView)
  • 入门车载以太网(4) -- 传输层(TCP\UDP)
  • 京东Q3收入2064亿,活跃用户连续三季度双位数增长该咋看?
  • 【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的到家护理服务平台的设计与实现
  • 在C++上实现反射用法
  • XXL JOB DockerCompose部署
  • centos7安装Chrome使用selenium-wire
  • STM32单片机CAN总线汽车线路通断检测
  • uniapp 实现 ble蓝牙同时连接多台蓝牙设备,支持app、苹果(ios)和安卓手机,以及ios连接蓝牙后的一些坑
  • 【linux】进程等待与进程替换
  • Pytest-Bdd-Playwright 系列教程(9):datatable 参数的使用
  • vue3:computed
  • 我谈二值形态学基本运算——腐蚀、膨胀、开运算、闭运算
  • web安全漏洞之ssrf入门
  • 优化C++设计模式:用模板代替虚函数与多态机制
  • 二分搜索的三种方法
  • 正则表达式(补充)
  • vue3: ref, reactive, readonly, shallowReactive
  • uniapp: 微信小程序包体积超过2M的优化方法
  • Vue和Vue-Element-Admin(十三):基于vue2比较学习vue3
  • 【AIGC】如何通过ChatGPT提示词Prompt定制个性学习计划
  • vue3: toRef, reactive, toRefs, toRaw
  • linux下编译安装memcached
  • Android ART知多少?
  • 《抽象类和接口》
  • 渗透测试之信息收集 DNS主机发现探测方式NetBIOS 协议发现主机 以及相关PorCheck scanline工具的使用哟