[C++] 70 ファイル検索アプリ : 標準出力の取得関数

[M1 Mac, Big Sur 11.6.7, clang 13.0.0, NO IDE]

前回の続きです。

標準出力を取得する関数を作成しました。個人的に使用頻度は高くなりそうです。

製作中のアプリは今のところたった250KBの超軽量です。リソースが潤沢な時代ではありますが、軽さと速さへの追求はやめられないです。

ちなみに近々統合予定のJavaScriptアプリ(ファイルを削除してディレクトリツリーを作るだけの単機能)は210MBの超重量です。単機能なのに800倍とは恐れ入ります。

もうGUIアプリ作成についてはこのままJavaには戻らず、C++とObjective-Cにどっぷり浸かりそうです。

void func_stdout(string cmd){
    FILE* fp = popen(cmd.c_str(), "r");

    char buffer[512];
    while (fgets(buffer, sizeof(buffer), fp) != NULL) {
        output_line->insert(buffer);
        std::cout << buffer;
    }
    pclose(fp);
}

[C++] 69 ファイル検索アプリ : 標準出力の取得 popen関数

[M1 Mac, Big Sur 11.6.7, clang 13.0.0, NO IDE]

ファイル検索アプリの検索結果を標準出力から取得し、Fl_Multiline_Outputに表示させました。

標準出力をわざわざ取得しようとする方はあまり多くないようで、調査に少々手間取りました。最初はGCC限定の方法をそれと気づかず試したために寄り道してしまいました。

これでメインのGUIとコンソールを一体化させることができました。

あとはスクロールバーを配置して、新機能を追加します。

ここ1週間ほどゲームプログラミングの学習で疲弊していましたが、やはり受け身の勉強よりも作りたいものを好きなように作る方が断然楽しいですね。

他人様の書いたコードを読解して手を入れるのは、例えNO IDE環境でもつらいものがあります。ビルドが異様に遅くてストレスフルなIDE環境でしたら早々に離脱しているでしょう。

#include <cstdio>
#include <cstdlib>
#include <iostream>

stringstream cmd;

const char* grep_char = grep_input->value();
cmd << "grep -rI --ignore-case " << string(grep_char) << " " << string(dir_char);
std::cout << cmd.str() << endl;

FILE* fp = popen((cmd.str()).c_str(), "r");

char buffer[1024];
while (fgets(buffer, sizeof(buffer), fp) != NULL) {
       output_line->insert(buffer);
       std::cout << buffer;
}
pclose(fp);