I/O定义
输入(input)
文件输入至程序
输出(output)
程序输出至文件
fopen()
函数原型
FILE *fopen(const char *filename, const char *mode);
参数mode
mode | 说明 |
---|---|
r | 以读模式打开。 |
w | 以写模式打开,并把文件长度截为零。 |
a | 以写模式打开,追加新内容在文件尾。 |
- 以mode w/a打开文件时,若文件不存在,将创建该文件。
- rb、wb、ab表示以二进制模式(而不是文本模式)打开文件。
- r(b)+、w(b)+、a(b)+表示以更新模式(读和写)打开文件。
返回值
返回文件指针。
fclose()
函数原型
int fclose(FILE *stram);
关闭文件流stream, 写出缓冲区的输出数据,丢弃缓冲区的输入数据,并释放缓冲区。
返回值
成功时返回0;否则返回EOF.
fread()
从文件流读取数据,写入缓冲区。
函数原型
size_t fread(void *restrict ptr, size_t size, size_t nmemb, FILE *restrict fp);
参数
参数名 | 说明 |
---|---|
ptr | 指向缓冲区 |
size | 每项记录的长度 |
nmemb | 要传输的记录个数 |
fp | 指向文件流 |
返回值
返回成功传输的记录个数。
示例
double earnings[10];
fread(earnings, sizeof (double), 10, fp);
/* 将10个double大小的值从fp指向的文件拷贝至earning指向的数组。 */
fwrite()
从缓冲区读取数据,写入文件流。
函数原型
size_t fwrite(const void *restrict ptr, size_t size, size_t nmemb, FILE *restrict fp);
参数
与fread类似。
返回值
与fread类似
fflush()
函数原型
int fflush(FILE *fp);
对于输出流:立即写出缓冲区中数据。
对于输入流:丢弃缓冲区中数据(实则未定义)
返回值
发生错误时返回EOF并设置errno;否则返回0.
示例
- 当用printf()调试程序时,可在每个printf语句后立即调用fflush():
printf("something or other");
fflash(stdout); //使缓冲区的数据立即写入stdout.
- 刷新标准输入:
fflush(stdin); //将输入缓冲区的数据丢弃。
//此用法不常用,应该用类似下面的代码代替:
while(getchar() != '\n')
continue;
- 刷新所有输出流:
fflush(NULL);
fssek()
函数原型
int fssek(FILE *stream, long int offset, int whence);
参数
参数名 | 说明 |
---|---|
stream | 指向文件 |
offset | 用来指定位置 |
whence | 定义offset的用法 |
- whence参数
whence取值 | 说明 |
---|---|
SEEK_SET | offset是一个绝对位置 |
SEEK_CUR | 基于当前(current)位置的相对位置 |
SEEK_END | 基于文件尾(end)的相对位置 |
返回值
成功时返回0;
失败时返回-1,并设置errno.