标准I/O库(对流的操作)

来源:互联网 发布:手机qq软件 编辑:程序博客网 时间:2024/04/24 02:04
1. I/O缓冲:
缓冲机制有三种:
(1)全缓冲:一般是缓冲区满了以后才进行实际的I/O操作。全缓冲是尽可能的多读写数据到缓冲区。
(2)行缓冲:当遇到换行符时,进行实际的I/O操作一般应用于标准输入输出。
(3)无缓冲:一般是应用对象是标准错误输出,对无缓冲的流每次读写操作都会引起flush操作。
行缓冲的示意图:
printf函数向标准输出写入多个字符,所写入的字符被放在一个缓冲区,直到碰到一个换行符系统才调用write函数将缓冲区数据写入到标准输出。
采用这种机制的可以提高I/O操作效率。因为系统调用会请求内核的服务,会引发CPU模式的切换 ,期间会有大量的堆栈数据保存操作,开销大。
缓冲机制,将多个读写操作合并为一次系统调用,减少了系统调用的次数,大大提高了运行效率。
2.标准I/O函数:
标准I/O函数是 对底层系统调用的封装。
最终读写设备或者文件操作是需要调用系统I/O函数来完成的。
3.文件指针和流
标准I/O函数使用文件指针,文件指针和文件描述符是一一对应关系。
文件指针指向的数据类型是FILE型。
在标准I/O中,一个打开的文件成为流。
每个进程在启动后打开三个流:stdin(标准输入流),stdout(标准输出流),stderr(标准输入流)
以下是一些常见的函数,有待补充。
4.fopen 函数
#include <stdio.h>
FILE *fopen(const char *path,const char *mode);
fopen打开由path指定的文件,并把它与一个文件流关联起来
 "r"或"rb":以只读方式打开。
 "w"或"wb":以只写方式打开,并把文件长度截短为零。
 "a"或"ab":以写方式打开,新内容追加在文件尾。
 "r+"或"rb+"或"r+b":以更新方式打开(读和写)。
 "w+"或"wb+"或"w+b":以更新方式打开,并把文件长度截短为零。
 "a+"或"ab+"或"a+b":以更新方式打开,新内容追加在文件尾。
注:字母b表示文件是一个二进制文件而不是文本文件。
fopen执行成功返回一个非空的FILE*指针,失败时返回NULL。
5.fread函数
从一个文件流离读取数据,
#include <stdio.h>
size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream);
数据从文件流strlen独到ptr指向的数据缓冲区。
size是每个数据记录的长度,nmemb:要传输的记录的个数。函数的返回值是成功读到数据缓冲区里的记录的个数。当到达文件结尾时,返回值会小于nmemb,或者0.
6.fwrite函数
fwrite函数从指定数据缓冲区取出数据,并写道输出流中。返回值是成功写入的记录个数。
#include <stdio.h>
size_t fwrite(const void *ptr,size_t size ,size_t nmemb,FILE *stream);
fread和fwrite函数主要执行二进制I/O操作,例如读写一个二进制数据,读写一个数据结构。
7.fclose函数
用于关闭指定文件流,原型如下:
#include <stdio.h>
int fclose(FILE *fp);
8.fflush函数
把文件流里所有未写出的数据立即写出。
#include <staio.h>
int fflush(FILE * stream);
使用它,可以确保在程序继续执行之前把重要数据都已经写到磁盘上。调用fclose函数,隐含执行了一次fflush操作了。
9.fseek函数
用于在文件流里为下一次读写操作指定位置。函数原型:
#inclue <stdio.h>
int fseek(FILE *stream,long offset,int whence);
成功返回0.错误返回-1
10.fgets,getc和getchar函数:
fgetc函数从文件流里取出下一个字节并返回,到达文件尾端或者出现错误,则返回EOF。getc和fgetc一样。
getchar相当于getc(stdin)。
#include <FILE *stream>
int fgetc(FILE *stream);
int getc(FILE *stream);
int getchar(void);
11.fputc,putc和putchar函数
#include <stdio.h>
int fputc(int c,FILE *stream);
int putc(int c,FILE *stream);
int putchar(int c);
原创粉丝点击