fopen()/fclose() ---->打开/关闭文件
fgetc()/fputc() ---->按字节读写文件
fgets()/fputs() ---->按行读写文件
fread()/fwrite() ---->按对象读写文件
ftell()/fseek()/rewind()/ ---->定位文件
fflush() ---->刷新流(强制刷新缓冲区)
feof() ---->判断错误流
相关手册的查找:
man手册:
man 1:shell指令和可执行程序
man2:系统调用函数
man3:标准库函数
1.fopen()
#include <stdio.h>
FILE *fopen(const char *pathname,const char *mode);
参数:
pathname:打开文件的文件名(包含路径)
mode:打开文件的方式
r:以只读的方式打开文件,文件必须要存在
r+:以读写方式打开,文件必须要存在
w:以只写方式打开文件,如果文件不存在,则会创建再打开
w+:以读写方式打开文件,如果文件不存在,则会创建再打开
a:以只写方式打开文件,如果文件不存在,则会创建再打开
a+:以读写方式打开文件,如果文件不存在,则会创建再打开
返回值:
成功返回对应的文件的流1指针,失败返回NULL,并设置错误号(errno)
errno:当前系统中最后一个错误的编号
---------------------------------------------------------
#include <string.h>
char *strerror(int errnum);
参数:
errnum:错误号
返回值:
成功返回错误原因
--------------------------------------------------------
#include <stdio.h>
void perror(const char *s);
参数:
s:提示信息
eg:
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main(int argc, char *argv[])
{
FILE *fp = fopen("1.txt","r");
if(NULL == fp)
{
//printf("errno=%d :%s\n",errno,strerror(errno));
perror("open 1.txt");
return -1;
}
printf("stdin_num:%d\n",stdin->_fileno);//标准输入流 ---->stdin ----->键盘
printf("stdout_num:%d\n",stdout->_fileno);//标准输出流 ---->stdout ----->终端
printf("stderr_num:%d\n",stderr->_fileno);//标准错误流 ---->stderr
printf("file_num:%d\n",fp->_fileno);//本文件流
printf("size=%ld\n",stdout->_IO_buf_end-stdout->_IO_buf_base);//末尾buf-起始buf-->空间的总字节
printf("open successfully\n");
fclose(fp);
return 0;
}
终端演示:
2、fclose()
#include <stdio.h>
int fclose(FILE *stream);
参数:
stream:关闭文件对应的流指针
返回值
成功返回0;失败返回EOF(宏定义了-1)
3、按字节读写—fgetc/fputc
```bash
#include <stdio.h>
int fgetc(FILE *stream);
参数:stream-->流指针
返回值:
成功返回读取的字符,失败返回-1;
读到文件末尾也会返回-1;
-------------------------------------------------------------------------------------------
#include <stdio.h>
int fputc(int c, FILE *stream);
参数:
stream-->流指针
返回值:
成功返回写入的字符,失败返回-1;
eg:
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp = fopen("1.txt","r+");
if(NULL==fp)
{
perror("open 1.txt");
return -1;
}
char ch=fgetc(fp);
printf("ch=%c\n",ch);
return 0;
}
---------------------------------------------------------------------------------------
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp = fopen("2.txt","w+");
if(NULL==fp)
{
perror("fopen");
return -1;
}
char ch = fgetc(stdin);
int ret = fputc(ch,fp);
if(ret<0)
{
perror("fputc");
return -1;
}
return 0;
}
```bash
4、按行读写---fgets()/fputs()
#include <stdio.h>
char *fgets(char *s, int size, FILE *stream);
参数:
s:字符串首地址
size:字符串读取的最大长度
stream:流指针
返回值:成功返回字符串的首地址,失败返回NULL;
注:
1.当读取内容遇到换行符,读取内容结束
2.\n换行符也会一起读进去存起来
3.最大读取内容为size-1个
-----------------------------------------------------------------------------------
int fputs(const char *s, FILE *stream);
参数:
s:写入字符串的首地址
stream:流指针
返回值:失败返回-1
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp=fopen("1.txt","r+");
if(NULL==fp)
{
perror("fopen");
return -1;
}
char buf[64]={0};
fgets(buf,64,stdin);
printf("%s\n",buf);
return 0;
}
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp=fopen("1.txt","a+");
if(NULL==fp)
{
perror("open");
return -1;
}
char buf[64]={0};
fgets(buf,64,stdin);
int ret=fputs(buf,fp);
if(ret<0)
{
printf("fputs");
return -1;
}
return 0;
}
fgets代码终端显示:
输入:
fputs代码终端显示:
1.txt:
运行程序后的1.txt: