C から外部プログラムを実行し、その出力を解析するにはどうすればよいですか?

他の人が指摘したように、 popen() 最も標準的な方法です。そして、この方法を使用した例を提供する回答がなかったため、以下に示します:

#include <stdio.h>

#define BUFSIZE 128

int parse_output(void) {
    char *cmd = "ls -l";    

    char buf[BUFSIZE];
    FILE *fp;

    if ((fp = popen(cmd, "r")) == NULL) {
        printf("Error opening pipe!\n");
        return -1;
    }

    while (fgets(buf, BUFSIZE, fp) != NULL) {
        // Do whatever you want here...
        printf("OUTPUT: %s", buf);
    }

    if(pclose(fp))  {
        printf("Command not found or exited with error status\n");
        return -1;
    }

    return 0;
}

出力例:

OUTPUT: total 16
OUTPUT: -rwxr-xr-x 1 14077 14077 8832 Oct 19 04:32 a.out
OUTPUT: -rw-r--r-- 1 14077 14077 1549 Oct 19 04:32 main.c

Unix っぽい環境での単純な問題については、popen() を試してください。 .

マニュアルページから:

読み取りモードを使用する場合、これはまさにあなたが求めていたものです。 Windows に実装されているかどうかはわかりません。

より複雑な問題については、プロセス間通信を調べる必要があります。


popen は Windows でサポートされています。こちらを参照してください:

http://msdn.microsoft.com/en-us/library/96ayss4b.aspx

クロスプラットフォームにしたい場合は、popen が最適です。