原创 C/C++的标准IO库

2016-5-26 17:38 1042 17 17 分类: MCU/ 嵌入式 文集: Qt和Cpp

除了不带缓冲的read/write方式,C/C++还提供了带缓冲的标准IO库,而且后者更加方便。
虽然C和C++的实现方式有区别,但是它们都是对streams概念的操作,可以对比学习、加深印象。

================================
a. C的标准IO库
当我们使用标准IO库打开或创建一个文件时,也可以说是我们为这个文件关联了一个流。
使用流的好处是(1)尽量减少read和write操作,(2)实现对buffer的自动管理。
标准输入/输出的文件描述符为STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO,它们对应的stream分别是:
stdin、stdout、stderr

有下面三种buffering:
Fully buffered.
Line buffered.
Unbuffered.

标准IO库的函数有(部分列出):
#include <stdio.h>
void setbuf(FILE *restrict fp, char *restrict buf );
int setvbuf(FILE *restrict fp, char *restrict buf, int mode, size_t size);
int fflush(FILE *fp);
FILE *fopen(const char *restrict pathname, const char *restrict type);
FILE *freopen(const char *restrict pathname, const char *restrict type, FILE *restrict fp);
FILE *fdopen(int fd, const char *type);
int fclose(FILE *fp);
int getc(FILE *fp);
int fgetc(FILE *fp);
int getchar(void);
int ferror(FILE *fp);
int feof(FILE *fp);
void clearerr(FILE *fp);
int printf(const char *restrict format, ...);
int fprintf(FILE *restrict fp, const char *restrict format, ...);

这些标准IO库函数的使用就不做实验了,因为它们很直观。
当需要使用它们的时候,根据功能调用相应的函数就好了,比如:
printf("Standard IO library.\r\n");

================================
b. C++的标准IO库
在C++里面,IO被定义成stream类及其对象,它们有三种:
iostream、fstream、sstream

cin是istream类的对象,cout是ostream类的对象。我们可以读取标志位来确定它们的状态。
如何刷新cout的输出缓冲区:
 * 程序正常结束时,会自动刷新。
 * 缓冲区满了就会自动刷新。
 * 使用endl等关键字。
 * 使用unitbuf设置stream( cout << unibuf)。
 * 绑定stream,比如cin和cerr绑定到了cout上,执行前两者时一定会执行后者。

标准输入/输出的IO应该已经非常熟悉了,那如何将文件打开成stream IO呢?
举个例子:
#include <iostream>
#include <fstream>

int main(int argc, char *argv[])
{
    ifstream in("hello_in");
    string a, b, c, d;
    in >> a >> b >> c >> d;
    cout << "Read:" << a << b << c << d << endl;

    ofstream out;
    out.open("hello_out");
    out << "Write: Standard IO lib." << endl;
    return 0;
}

假如我们有一个文件hello_,它的内容是:
$ cat hello_in
My name is Marianna.

当程序执行时,会打印如下结果:
$ ./UnixProg_01
Read:MynameisMarianna.

然后再查看hello_out文件的内容,它变成了:
$ cat hello_out
Write: Standard IO lib.

================================
结论:
C++的标准IO库,使用起来非常简单!
C的标准IO库,更贴和底层!
 

文章评论0条评论)

登录后参与讨论
我要评论
0
17
关闭 站长推荐上一条 /2 下一条