-
Notifications
You must be signed in to change notification settings - Fork 1
API Reference zh CN
本页面提供 cfstream 的完整 API 参考。
它适合作为函数声明、参数、返回值、行为和注意事项的查询页面。
如果你想阅读教程式文档,请查看:
cfstream 提供两个公开头文件:
| 头文件 | 语言 | 主要用途 |
|---|---|---|
cfs.hpp |
C++ | 带有命名空间支持的 C++ 接口,并提供独立 C++ 文件流 |
cfs.h |
C | 用于标准输入输出重定向的 C 接口 |
当前版本:
1.3.0
C++ API 由以下头文件提供:
#include "cfs.hpp"所有 C++ API 都位于 cfs 命名空间中。
namespace cfs {
static std::ifstream cin;
static std::ofstream cout;
static inline const char* getversion();
static inline void cfs(const char* input, const char* output);
static inline void closecfs();
static inline void cppfs(const char* input, const char* output);
static inline void closecppfs();
}static inline const char* cfs::getversion();返回当前 cfstream 版本。
无。
| 类型 | 说明 |
|---|---|
const char* |
当前 cfstream 版本字符串 |
对于版本 1.3.0,返回的字符串为:
1.3.0
该函数不执行文件操作。
#include <iostream>
#include "cfs.hpp"
int main() {
std::cout << cfs::getversion() << '\n';
return 0;
}static inline void cfs::cfs(const char* input, const char* output);重定向标准输入和/或标准输出。
该函数类似于直接使用 freopen,但由 cfstream 进行封装。
| 参数 | 类型 | 说明 |
|---|---|---|
input |
const char* |
输入文件名。如果为 NULL,则不重定向输入。 |
output |
const char* |
输出文件名。如果为 NULL,则不重定向输出。 |
在 C++11 或更高版本中,也可以使用 nullptr 代替 NULL。
无。
在对应参数不为空时,该函数内部会使用:
std::freopen(input, "r", stdin);
std::freopen(output, "w", stdout);重定向成功后,以下流或函数会受到影响:
std::cin
std::cout
scanf
printf它们会使用重定向后的标准输入输出流。
- 传入
NULL或nullptr表示对应的流不会被重定向。 - 两个参数都传入
NULL或nullptr是允许的,但没有实际意义。 - 该函数不会打开
cfs::cin或cfs::cout。 - 如需将标准流恢复到控制台,请使用
cfs::closecfs()。
#include <iostream>
#include "cfs.hpp"
int main() {
cfs::cfs("test.in", "test.out");
int n;
std::cin >> n;
std::cout << n << '\n';
cfs::closecfs();
return 0;
}static inline void cfs::closecfs();结束由 cfs::cfs() 建立的文件重定向,并尝试将标准输入输出恢复到控制台。
无。
无。
该函数内部会将 stdin 和 stdout 重新定向到平台对应的控制台设备。
| 平台 | 控制台设备 |
|---|---|
| Windows | CON |
| Linux / macOS / 其他类 Unix 系统 | /dev/tty |
- 该函数不会永久关闭
std::cin或std::cout。 - 它会将标准流重新定向回控制台设备。
- 它不会影响
cfs::cin或cfs::cout。 - 对于独立 C++ 文件流,请使用
cfs::closecppfs()。
#include <iostream>
#include "cfs.hpp"
int main() {
cfs::cfs("test.in", "test.out");
int n;
std::cin >> n;
std::cout << n << '\n';
cfs::closecfs();
std::cout << "Back to console" << '\n';
return 0;
}static inline void cfs::cppfs(const char* input, const char* output);打开独立的 C++ 文件流:
cfs::cin
cfs::cout这两个文件流与标准流相互独立。
| 参数 | 类型 | 说明 |
|---|---|---|
input |
const char* |
cfs::cin 使用的输入文件名 |
output |
const char* |
cfs::cout 使用的输出文件名 |
无。
如果 cfs::cin 和 cfs::cout 都没有处于打开状态,该函数会打开:
cfs::cin.open(input);
cfs::cout.open(output);如果 cfs::cin 或 cfs::cout 已经打开,该函数不会重新打开它们,并会向 std::cerr 输出错误信息:
Error-from-cfs Already open cppfs,please close first!
-
cfs::cppfs()不会重定向std::cin或std::cout。 -
scanf和printf不会受到影响。 - 不要向
cfs::cppfs()传入NULL或nullptr。 - 如果需要单边重定向,请使用
cfs::cfs()。 - 再次调用
cfs::cppfs()前,请先调用cfs::closecppfs()。
#include <iostream>
#include "cfs.hpp"
int main() {
cfs::cppfs("test.in", "test.out");
int n;
cfs::cin >> n;
cfs::cout << n << '\n';
std::cout << "This goes to the console." << '\n';
cfs::closecppfs();
return 0;
}static inline void cfs::closecppfs();关闭由 cfs::cppfs() 打开的独立 C++ 文件流。
无。
无。
该函数会检查文件流是否已经打开,并在需要时关闭它们:
if (cin.is_open()) cin.close();
if (cout.is_open()) cout.close();- 该函数只影响
cfs::cin和cfs::cout。 - 它不会影响
std::cin、std::cout、scanf或printf。 - 调用
cfs::closecppfs()后,除非再次调用cfs::cppfs(),否则不要继续使用cfs::cin或cfs::cout。
#include "cfs.hpp"
int main() {
cfs::cppfs("test.in", "test.out");
int n;
cfs::cin >> n;
cfs::cout << n << '\n';
cfs::closecppfs();
return 0;
}static std::ifstream cfs::cin;由 cfs::cppfs() 使用的输入文件流。
std::ifstream调用:
cfs::cppfs("test.in", "test.out");之后,cfs::cin 会从 test.in 读取数据。
-
cfs::cin独立于std::cin。 - 它只会被
cfs::cppfs()打开。 - 它会被
cfs::closecppfs()关闭。 - 因为它使用
static声明,所以具有内部链接属性。
int n;
cfs::cin >> n;static std::ofstream cfs::cout;由 cfs::cppfs() 使用的输出文件流。
std::ofstream调用:
cfs::cppfs("test.in", "test.out");之后,cfs::cout 会写入 test.out。
-
cfs::cout独立于std::cout。 - 它只会被
cfs::cppfs()打开。 - 它会被
cfs::closecppfs()关闭。 - 因为它使用
static声明,所以具有内部链接属性。
cfs::cout << "Hello cfstream" << '\n';C API 由以下头文件提供:
#include "cfs.h"C API 不使用命名空间。
static inline const char* cfs_getversion(void);
static inline void cfs(const char* input, const char* output);
static inline void closecfs(void);static inline const char* cfs_getversion(void);返回当前 cfstream 版本。
无。
| 类型 | 说明 |
|---|---|
const char* |
当前 cfstream 版本字符串 |
对于版本 1.3.0,返回的字符串为:
1.3.0
该函数不执行文件操作。
#include "cfs.h"
int main(void) {
printf("%s\n", cfs_getversion());
return 0;
}static inline void cfs(const char* input, const char* output);重定向标准输入和/或标准输出。
该函数类似于直接使用 freopen,但由 cfstream 进行封装。
| 参数 | 类型 | 说明 |
|---|---|---|
input |
const char* |
输入文件名。如果为 NULL,则不重定向输入。 |
output |
const char* |
输出文件名。如果为 NULL,则不重定向输出。 |
无。
在对应参数不为 NULL 时,该函数内部会使用:
freopen(input, "r", stdin);
freopen(output, "w", stdout);重定向成功后,以下函数会受到影响:
scanf
printf它们会使用重定向后的标准输入输出流。
- 传入
NULL表示对应的流不会被重定向。 - C 不支持
nullptr。 - 两个参数都传入
NULL是允许的,但没有实际意义。 - 如需将标准流恢复到控制台,请使用
closecfs()。
#include "cfs.h"
int main(void) {
cfs("test.in", "test.out");
int n;
scanf("%d", &n);
printf("%d\n", n);
closecfs();
return 0;
}static inline void closecfs(void);结束由 cfs() 建立的文件重定向,并尝试将标准输入输出恢复到控制台。
无。
无。
该函数内部会将 stdin 和 stdout 重新定向到平台对应的控制台设备。
| 平台 | 控制台设备 |
|---|---|
| Windows | CON |
| Linux / macOS / 其他类 Unix 系统 | /dev/tty |
- 该函数不会永久关闭
stdin或stdout。 - 它会将标准流重新定向回控制台设备。
- 在不再需要文件重定向时,应在
cfs()之后调用它。
#include "cfs.h"
int main(void) {
cfs("test.in", "test.out");
int n;
scanf("%d", &n);
printf("%d\n", n);
closecfs();
printf("Back to console\n");
return 0;
}| 接口 | 参数 | 允许 NULL
|
允许 nullptr
|
说明 |
|---|---|---|---|---|
cfs::cfs |
input |
是 | C++11 或更高版本 | 如果为空,则不重定向输入 |
cfs::cfs |
output |
是 | C++11 或更高版本 | 如果为空,则不重定向输出 |
cfs |
input |
是 | 否 | C 不支持 nullptr
|
cfs |
output |
是 | 否 | C 不支持 nullptr
|
cfs::cppfs |
input |
不推荐 | 不推荐 | 请使用有效文件名 |
cfs::cppfs |
output |
不推荐 | 不推荐 | 请使用有效文件名 |
| API | 返回类型 | 含义 |
|---|---|---|
cfs::getversion() |
const char* |
当前 cfstream 版本 |
cfs_getversion() |
const char* |
当前 cfstream 版本 |
cfs::cfs() |
void |
无返回值 |
cfs::closecfs() |
void |
无返回值 |
cfs::cppfs() |
void |
无返回值 |
cfs::closecppfs() |
void |
无返回值 |
cfs() |
void |
无返回值 |
closecfs() |
void |
无返回值 |
如果在 cfs::cin 或 cfs::cout 已经打开时调用 cfs::cppfs(),它会向 std::cerr 输出以下信息:
Error-from-cfs Already open cppfs,please close first!
随后函数返回,不会重新打开文件流。
如果 cfs.h 以 C 语言方式编译,并且使用的标准低于 C99,编译会停止,并显示:
cfs.h requires C99 or later.
closecfs() 和 cfs::closecfs() 会使用平台相关的控制台设备来恢复标准流。
| 平台 |
stdin 恢复目标 |
stdout 恢复目标 |
|---|---|---|
| Windows | CON |
CON |
| Linux / macOS / 其他类 Unix 系统 | /dev/tty |
/dev/tty |
在 cfs.hpp 中,cfs::cin 和 cfs::cout 使用 static 声明。
这会让它们具有内部链接属性。
每个包含 cfs.hpp 的翻译单元都会拥有自己独立的一份:
cfs::cin
cfs::cout在 cfs.h 中,函数使用 static inline 定义。
这允许该头文件被多个 C 源文件包含,而不会产生外部链接冲突。
当 cfs.h 被 C++ 代码包含时,C 接口会被包裹在 extern "C" 中。