0

最近Linuxを使い始めたので、Linuxについての知識はほとんどありません。少なくとも、Linux のすべてがファイルであることは知っています。

特定の Linux システムのリターンをキャッチする方法を知りたいです。たとえば、インストール ルビー (sudo apt-get -y インストール ルビー) を選択した場合、それが正常にインストールされたことをどのように確認できますか?

char buffer[1024];
char *buf = malloc(4096);

char *pl;
FILE *fp;

if (strcmp(cmd, "ruby") == 0)
{
        fp = popen("sudo apt-get -y install ruby", "r");
}

if (fp == NULL)
{
        printf("Failed to load file\n");
        exit(0);
}

while ((pl = fgets(buffer, sizeof(buffer), fp)) != NULL)
{
        strcat(buf, buffer);
}

strcat(buf, "\n");

pclose(fp);

次に、開いたファイルを読み取るためにpopenを使用していますが、ターミナルに表示されるものと同じものが含まれており、OKやFAILなどの「フラグ」が必要です。

私の下手な英語でごめんなさい。

4

2 に答える 2

0

apt-get の終了コードは、成功したかどうかを示します (0 は成功を意味します)。pclose(fp) は終了コードを返すため、次のことができます。

if (pclose(fp) == 0) {
  // success
} else {
  // failure
}  

ただし、実際にはパイプから読み取っていないことに気付くかもしれません。持っている理由は特にありません。Joachimが提案したように、 system() 関数はおそらくあなたのケースにより適しています。

于 2012-05-25T13:29:49.513 に答える
0

実行中のプログラムの終了ステータスを確認する必要があります。参照: http://linux.die.net/man/3/popen

The pclose() function waits for the associated process to terminate and returns the
exit status of the command as returned by wait4(2).

すべてのプロセスは、プログラムがどのように/なぜ終了したかを示す終了ステータス (0 から 255 までの整数) を提供します。0 は通常、通常の (成功した) 実行に使用されます。これは、探す必要があるものです。

apt-get の正しい終了コードについては、apt-get のマニュアル ページを参照するか、グーグルで検索してください。

それが役に立てば幸い!

于 2012-05-25T13:30:51.980 に答える