使用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);
}
これを堅牢にするために、エラー チェックを追加する必要があります。
私は を好むことに注意してください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を読み取ります。