使用popen
:
void dostuff(const char* s) {
FILE* f = fopen(s, "r");
FILE* p = popen("myscript.sh", "w");
char buf[4096];
while (size_t n = fread(buf, 1, sizeof(buf), f))
if (fwrite(buf, 1, n, p) < n)
break;
pclose(p);
}
您需要添加错误检查以使其健壮。
请注意,我更喜欢 a const char*
,因为它更灵活(与 以外的东西一起使用std::string
)并且与内部发生的事情相匹配。如果您真的喜欢std::string
,请这样做:
void dostuff(const std::string& s) {
FILE* f = fopen(s.c_str(), "r");
⋮
另请注意,选择 4096 字节缓冲区是因为它与大多数系统上的页面大小相匹配。这不一定是最有效的方法,但它适用于大多数用途。我发现 32 KiB 是我自己在笔记本电脑上进行的不科学测试中的最佳选择,所以你可能想玩一玩,但如果你对效率很认真,你会想要切换到异步 I/O,然后开始开始写入n后立即读取n+1。