标志I/O库:C标准库提供了操作文件的标准I/O函数库,与系统调用相比,主要差别是实现了一个跨平台的用户态缓冲的解决方案。简单来说就是标准I/O的移植性更好。
(1) 函数fopen():
#include <stdio.h> // 头文件
FILE *fopen(const char *path, const char *mode); //函数原型
fopen打开由path指定的文件,并把它与一个文件流关联起来。mode参数指定文件的打开方式。
fopen执行成功返回一个非空的FILE*指针,失败时返回NULL。
例: #include <stdio.h> int main() { FILE *fd = fopen("text", "wb+"); if(fd == NULL) { printf("文件打开失败\n"); perror("open"); } printf("打开成功\n"); return 0; }(2) 函数fread();
fread()用于从一个文件流里读取数据。
#include <stdio.h>
size_t fread(void *ptr, size_t size, size_tnmemb, FILE *stream); //函数原型
数据从文件流stream读到ptr指向的数据缓冲区里。size参数指定每个数据记录的长度,nmemb给出要传输的记录的个数。函数的返回值是成功读到数据缓冲区里的记录的个数(不是字节数)。
(3) 函数fwrite();
fwrite()从指定的数据缓冲区里取出数据记录,并把它们写到输出流中。它的返回值是成功写入的记录个数。函数原型如下:
#include <stdio.h>
size_t fwrite(const void *ptr, size_t size,size_t nmemb,FILE *stream); //函数原型
例: #include <stdio.h> #define SIZE 1024 int main() { FILE * fp1 = fopen("1.ppt.pptx","ab+"); if(fp1 == NULL) { printf("文件打开失败\n"); return -1; } FILE * fp2 = fopen("1.ppt.pptx","ab+"); if(fp1 == NULL) { printf("文件打开失败\n"); return -1; } int ret = 0; char buf[SIZE] = {0}; while(ret = fread(buf, sizeof(char), SIZE, fp1)) { fwrite(buf, sizeof(char), ret, fp2); } if(ret == 0 && !feof(fp1)) { return -1; } printf("文件复制成功\n"); return 0; } 这个程序的功能是复制一个文件。主要思想就是从一个文件里读取1024个字符,然后写入到一个新的文件里,然后再读再写直到第一个文件读完。(4) 函数fclose()
fclose()函数用于关闭指定的文件流。
#include <stdio.h>
int fclose(FILE *fp); //函数原型
(5) 函数fflush()
fflush()用于把文件流里所有未写出的数据立即写出。
#include <stdio.h>
int fflush(FILE *stream);
使用这个函数可以确保在程序继续执行之前重要的数据都已经被写到磁盘上。
调用fclose函数隐含执行了一次fflush操作,所以不必在调用fclose之前调用fflush。
(6) 函数fseek()
fseek()用于在文件流里为下一次读写操作指定位置。
#include <stdio.h>
int fseek(FILE *stream, long offset, int whence);
offset和whence参数的含义和取值与lseek函数完全一样,但lseek返回的是一个off_t数值,而fseek返回的是一个整数:0表示成功,-1表示失败并设置errno指出错误。
(7) 函数fgetc();
fgetc()从文件流里取出下一个字节并把它作为一个字符返回。当它到达文件结尾或出现错误时,返回EOF。getc()和fgetc()一样,但它有可能被实现为一个宏。getchar()相当于getc(stdin)。
#include <stdio.h>
int fgetc(FILE *stream);
int getc(FILE *stream);
int getchar(void);
(8) 函数fputc()
fputc()把一个字符写到一个输出文件流中,它返回写入的值,如果失败,则返回EOF。类似fgetc()和getc(),putc()的作用也相当于fputc(),但它可能被实现为一个宏。putchar()相当于putc(c, stdout),它把单个字符写到标准输出。
#include<stdio.h>
int fputc(intc, FILE *stream);
int putc(intc, FILE *stream);
int putchar(intc);
注意:putchar和getchar都是把字符当作int类型而不是char类型来使用的,这就允许文件结尾EOF取值为-1。