私のCプログラムで日付などのシステムコマンドを実行し、出力をchar * dateにパイプして後で使用する方法はありますか?私は "システム"コマンドを使用しようとしていましたが、システムを実行しています( "日付")。直ちに日付出力をstdoutに出力します。自分のプログラム内でシステムやエグゼクティブを使ってこのデータを取得したい。どんな提案も高く評価されます...C言語でのexec */system出力のパイプ処理
ありがとう!
私のCプログラムで日付などのシステムコマンドを実行し、出力をchar * dateにパイプして後で使用する方法はありますか?私は "システム"コマンドを使用しようとしていましたが、システムを実行しています( "日付")。直ちに日付出力をstdoutに出力します。自分のプログラム内でシステムやエグゼクティブを使ってこのデータを取得したい。どんな提案も高く評価されます...C言語でのexec */system出力のパイプ処理
ありがとう!
popen()
をご覧ください。あなたはそうのように、それとのFILE
ポインタを開く:
#include <stdio.h>
FILE *f = popen("date", "r");
そして、あなたは選択のあなたのバッファにf
からの読み取りにfread()
またはfscanf()
を使用することができます。
fread/fscanfの代わりにfgetsを使用しました。マルチスレッドアプリケーションでpopenを使用する際に他に考慮すべき点があるかどうかは疑問でした。 –
@ the.director最初に、私は 'popen()'とpthreadsについての経験はありませんが、このフォーラムスレッドは、それが大丈夫だと示唆する推論(およびドキュメント)を表示します:http://cboard.cprogramming.com/linux-programming/136406 -popen-thread-safe.html –
あなたは、おそらくそれはあなたのためにすべてをセットアップし、あなたはあなたがstdio.h
で宣言された関数popen
が必要
何をしたいんpopen()
をしたいです。その後、コマンドの出力をファイルのように読むことができます。
参照として、次のコードスニペットを使用できます。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fp;
char *command="date";
char line[256];
if ((fp = popen(command, "r")) == NULL) {
perror("popen failed");
return -1;
}
while (fgets(line, sizeof(line), fp))
printf("%s", line);
pclose(fp);
return 0;
}
'popen'の結果のキャスト'(FILE *)は必要ですか? 'popen'はすでに' FILE * 'を返します。 –
@undur_gongorはい、あなたは正しいです..私はコードを更新しました..ありがとう! :) –
「man popen」をご覧ください。 –