1.标准c库文件编程有fopen, fclose, fread, fwrite, fgetc, fgets, fputc, fputs, freopen, fseek, ftell, rewind
等。
FILE *fopen(char *filename, char *mode)
filename 文件名称
mode 打开模式:
r 只读方式打开一个文本文件
r+ 可读可写方式打开一个文本文件
w 只写方式打开一个文本文件 (w没有就创建)
w+ 可读可写方式创建一个文本文件
wb 只写方式打开一个二进制文件
a 追加方式打开一个文本文件
ab 追加方式打开一个二进制文件
rb 只读方式打开一个二进制文件
rb+ 可读可写方式打开一个二进制文件
wb+ 可读可写方式生成一个二进制文件
a+ 可读可写追加方式打开一个文本文件
ab+ 可读可写方式追加一个二进制文件
open和fopen的区别:
前者属于低级IO,后者是高级IO。
前者返回一个文件描述符,后者返回一个文件指针。
前者无缓冲,后者有缓冲。
前者与 read, write 等配合使用, 后者与 fread, fwrite等配合使用。
后者是在前者的基础上扩充而来的,在大多数情况下,用后者。
详情见:https://www.cnblogs.com/NickyYe/p/5497659.
int fgetc(FILE *stream);
返回值:成功返回 读到的ascll
失败或者读到末尾 EOF
int fputc(int c, FILE *stream);
返回值: 成功返回写入的个数
失败返回EOF
char *fgets(char *s, int size, FILE *stream);
返回值: 成功返回写入字符串的首地址
失败/末尾 返回NULL
int fputs(const char *s, FILE *stream);
返回值:成功返回正整数
失败返回EOF
参数 : 你要输出的字符串首地址
你要输出的文件流指针
2.写读操作
#include<stdio.h>
#include<string.h>
//fopen 跟fwrite/fread
int main()
{
FILE *fp; //标准文件 返回值是文件流 并不是文件描述符
char *str = "haohaoxuexi";
char readbuf[128]={0};
fp=fopen("./file1","w+");
fwrite(str,sizeof(char),strlen(str),fp); //数据缓存区 写入一个数据的大小 个数 那个文件
fseek(fp,0,SEEK_SET); //写完之后 光标定位到首位置 下次读的时候才会从头开始读
//str的数据已经写入file14里面
fread(readbuf,sizeof(char),strlen(str),fp); //一个读一个字节 读strlen(str)这么多次
// fread(readbuf,sizeof(char)*strlen(str),1,fp); //一次性读这么多个 读一次 两种写法
//再将数据读出来 读到readbuf里面
printf("read :%s\n",readbuf);
return 0;
}
3.fputs操作
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
FILE *fp;
int i;
char *p= "haohaoxuexi";
int len=strlen(p);
fp = fopen("./file1","w+");
for(i=0;i<len;i++)
{
fputc(*p,fp); //把p的内容写进fp
p++;
}
fclose(fp);
return 0;
}
4.fgets操作
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
FILE *fp;
int i;
char c;
fp = fopen("./file1","r+");
while(!feof(fp))
{
c=fgetc(fp);
printf("%c",c);
}
putchar("\n");
fclose(fp);
return 0;
}
~