打开文件:fopen
函数简介:
#include <stdio.h>
FILE *fopen(const char *pathname, const char *mode);
功能:打开文件
参数:pathname:文件路径(有路径的文件名)
mode:打开的方式:
方式 权限 文件要求 写的形式
r 只读 文件必须存在
r+ 可读可写 文件必须存在 清空模式
w 只写 文件可以不存在,不存在则创建 清空模式
w+ 可读可写 文件可以不存在,不存在则创建 清空模式
a 只写 文件可以不存在,不存在则创建 追加模式
a+ 只写 文件可以不存在,不存在则创建 追加模式
返回值:
成功:流(文件指针)
失败:NULL,返回错误码
关闭文件:flose
函数简介:
#include <stdio.h>
int fclose(FILE *stream);
功能:关闭文件
参数:流strem
返回值:成功返回0
失败则返回错误码
int argc,char *argv[]
//argc:命令行中的参数个数
//argv:命令行参数
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
FILE *fp;
if(argc!=2){
printf("User:%s <filename>\n",argv[0]);
exit(1);
}
fp=fopen(argv[1],"r");
if(NULL==fp){
perror("fopen");
}
return 0;
}
流的读写
1、一次一个字符
读取:
fgetc
函数简介:
#include <stdio.h>
int fgetc(FILE *stream);
功能:根据相应文件的流,读取一个字符;
参数:流strem
返回值:成功返回读取到的字符
失败返回错误码
宏:getc
man getc
#include <stdio.h>
int getc(FILE *stream);
getc是fgetc的宏定义
最大的区别是fgetc是函数,getc是宏。
getc是fgetc通过宏实现的,调用的时候需要注意:
参数stream不能是有副作用的表达式
功能参数返回值都和fgetc是一样的
#define getc fgetc
#define wyz fgetc
getchar();
#include <stdio.h>
int getchar(void);
功能:
在标准输入读取一个字符
参数:
空
返回值:
成功读取一个字符
失败返回错误码
一般getchat 一般用于清理垃圾字符
写的操作(一次一个字符)
fputc();
函数简介:
#include <stdio.h>
int fputc(int c, FILE *stream);
功能:对相对应的流写入一个字符
参数:c;需要写入的字符
stream:流
返回值:
成功:写入字符
失败:返回错误码
putc();
man putc
#include <stdio.h>
int putc(int c, FILE *stream);
putc是fputc的宏,用法和fputc一模一样
#define putc fputc
*****************************************
putchar
man putchar
#include <stdio.h>
int putchar(int c);
功能:
向标准输出写一个字符
参数:
c:需要写入的字符
返回值:
成功:写入的字符
失败:返回错误码
2、一次一行字符
读取:
fgets();
函数简介:
#include <stdio.h>
char *fgets(char *s, int size, FILE *stream);
功能:
对相应的文件读取一行数据,如遇到“\n”则停止读取
参数:
s:读出一行数据放置的地方,char buf[128]
size:读取数据的最大的限度,读一次读多少个字节,size-1,‘\0’
stream:流
返回值:
成功:读出数据存放的地址
失败:NULL并返回错误码
************************************
gets();
#include <stdio.h>
char *gets(char *s);
为了安全,gets少用,因为其没有指定输入字符的大小,
限制输入缓冲区的大小,如果输入的字符比定义的数组长度大的话,
容易发生内存越界,堆栈溢出。
功能:
在标准输入读取一行数据
参数:
s:读出一行数据放置的地方,char buf[128]
返回值:
成功:读出数据存放的地址
失败:NULL并返回错误码
写的操作(一次一行字符)
fputs
#include <stdio.h>
int fputs(const char *s, FILE *stream);
功能:
写入一行数据到相应的文件中
参数:
s:写入一行数据放置的地方,char buf[128]
stream:流
返回值:
成功返回非负数
失败返回错误码
*************************************
puts
#include <stdio.h>
int puts(const char *s);
功能:
向标准输出写一行字符
参数:
s:写入一行数据放置的地方,char buf[128]
返回值:
成功返回非负数
失败返回错误码
3、一次一块字符------*
读取(一次读取一块字符)
fread
man fread
#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:
在相应的流中读取一块字符
参数:
ptr:读取数据所放置的位置
size:读取一次要读多少个字节
nmemb:运行一次函数,读取多少次数据
stream:流
返回值:
成功返回:读取的次数
失败返回:0
写入(一次写入一块字符)
fwrite
#include <stdio.h>
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
功能:
写入一块数据到相应的文件中
参数:
ptr:写入数据所放置的位置
size:写入一次要写多少个字节
nmemb:运行一次函数,写入多少次数据
stream:流
返回值:
成功返回:写入的次数
失败返回:0
拓展:
#include <strings.h>
void bzero(void *s, size_t n);
功能:
清空数组
参数:
s:清空的数组
n:数组的大小
移动光标-----*:
ftell
#include <stdio.h>
long ftell(FILE *stream);
功能:ftell告诉我们光标的位置在哪;
参数:流stream
返回值:成功返回光标当前位置
失败返回-1.并返回错误码
#include <stdio.h>
void rewind(FILE *stream);
功能:
将光标移动回文件头部
参数:
流stream
返回值:成功返回光标当前位置
失败返回-1.并返回错误码
fseek()----*
#include <stdio.h>
int fseek(FILE *stream, long offset, int whence);
功能:
根据参数的信息,相应的移动光标
参数:
stream:流
offset:偏移量
whence:起始位置
SEEK_SET---文件的头部
SEEK_CUR---光标的当前位置
SEEK_END---文件末尾
返回值:
成功返回0
失败返回-1.并返回错误码