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



