私は可変出力の単一の巨大な行を印刷するbashスクリプトを持っています。 私が見たすべての例では、1行ずつ読み込むために1024バイト程度の固定バッファを使用しています。可変長コマンド出力をどのように割り当てることができますか?
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
FILE *fp;
char path[1024];
/* Open the command for reading. */
fp = popen("bash /home/ouhma/myscript.sh", "r");
if (fp == NULL) {
printf("Failed to run command\n");
exit(1);
}
/* Read the output a line at a time - output it. */
while (fgets(path, sizeof(path)-1, fp) != NULL) {
printf("%s", path);
}
/* close */
pclose(fp);
return 0;
}
リンク参照:C: Run a System Command and Get Output?
しかし、出力ラインは1024バイトのさらに大きな長さを持っている場合、私はわからない場合は何? popen()
コマンドでどのように読むことができますか?
あなたは専用メモリの制約にできるだけ長く対象として行を読み取るためにPOSIX [ 'getlineの()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/getline.html)を使用するか、またはあなたができることができますあなたがまだ改行を受け取っていないときに 'fgets()'を繰り返し呼び出し、必要に応じて動的に割り当てるバッファを追加します。どちらもどちらも非常に複雑ですが、 'getline()'を使う方があなた自身で行うよりも確実です。行が1024以上であれば、あなたの現在のコードは次のfgets()の呼び出し(S)で行の残りの部分を読むことを続けること –
は注意。したがって、テキストを単に出力する現在のコードは問題なく動作します。魔法のように – nos