system()
またはexec()
を使用すると、コマンドを実行できますが、結果はコンソールに表示されます。コマンドを実行して出力を抽出して処理し、それを表示したい。 Windows/DOSプラットフォームでこれをどのように達成できますか?Cでdosコマンド出力を抽出
答えて
は、標準Cのそのようなものは何もありませんが、通常は、POSIXとの互換性のために、コンパイラは、実装popen
あなたが尋ねたストリームにFILE *
をコマンドを開始します(それがsystem
で行うように)と返し、(VC++で_popen
)あなたがプログラムに何らかの入力をしたい場合には、出力または stdinを読みたい場合は、stdoutを求めることができます。
FILE *
を取得したら、通常のファイルと同じように、通常のfread
/fscanf
/...と読むことができます。
あなたは両方の入力と出力のリダイレクトを持つようにしたい場合は、Windowsのコンパイラは通常はPOSIX pipe
よう何かを持っているが、それは完全に互換性がありません(ほとんどのWindowsプロセスの作成のでやるので、物事は、少し複雑になりますし始めますモデルは異なる)。
popen
よりも起動したプロセスを制御する必要がある場合は、WindowsのIOリダイレクションを実行するための「実際の」方法を使用してください。CreateProcess
と適切なオプション。例えば、 here。
恐ろしい答え。 +1 ....私の答えも見てください...それは簡単な方法で解決します。 –
@ahmedtabrez:ありがとうございますが、必要でないときにファイルIO(すべての短所、権限、既存のファイル、エラー処理など)が必要なので、あなたの方法をお勧めしません。 –
マテオ・イタリアの答えは素晴らしいです。しかし、一部のコンパイラ(特に古いもの)はpopen()
をサポートしていません。
popen()
がサポートされていない場合は、次の解決策があります。
DOSでは>
を使用して出力を一時ファイルにリダイレクトできます。
例:
C:\> ipconfig > temp.txt
私はその後、私のC -codeにTEMP.TXTを開き、その内容を再処理することができます。
system("ipconfig > temp.txt");
FILE *fp;
fp = fopen("temp.txt","r");
// //
//... Code for reprocessing can go here ...//
// //
ここでは、ほとんどのシステム上で動作するはずですpopenのない人のための代替の答えだ。このため
マイCコードは次のようになります。このコードはスレッドセーフではありません。私は、これがほとんどの状況にとって重大な制限ではないと考えています。
#include <stdio.h>
#include <process.h>
#include <io.h>
#include <sys\stat.h>
#include <assert.h>
int main()
{
int so = dup(1);
close(1);
int i = creat("output.txt", S_IWRITE);
assert(i == 1); // i should be 1...
system("dir");
close(i);
dup2(so, 1);
close(so);
}
の
- 1. MS-DOSのデバッグツールのUコマンドの出力
- 2. サブストリングとコマンドの出力をDOSバッチプログラミングで変数に代入
- 3. DOSコマンドはファイルへのリダイレクト出力を切り捨てます
- 4. Powershell in C#Returnコマンド出力
- 5. 端末のコマンド出力から1行を抽出する
- 6. Expect:コマンドの出力から負の数を抽出する
- 7. MS-DOSコマンドの出力を変数として取得する方法
- 8. は$(コマンド)echoコマンドの出力
- 9. bashを使用してコマンドの出力からデータフィールドを抽出する
- 10. コマンド出力文字列から特定の要素を抽出します。
- 11. R出力の値を抽出する
- 12. ループでgrepコマンドの出力
- 13. コマンドotool出力は
- 14. ハイライト「COMM」コマンド出力
- 15. PowerShellコマンド出力ログ
- 16. Bash - コマンドの出力をキャッチ
- 17. Perlコマンドの出力をファイル
- 18. コマンド出力をテキストボックスにリダイレクト
- 19. ncursesとC- ncursesウィンドウで 'df'コマンドの出力を表示
- 20. c#でlableにcmdコマンド出力を取得するには
- 21. CNTK出力コマンドで出力ファイルが生成されない
- 22. コンソール出力をC++のファイルに出力
- 23. 抽出入力引数は
- 24. Loop Findコマンドの出力
- 25. Pythonのコマンド実行出力
- 26. Linuxシェルの出力コマンド
- 27. コマンド出力パラメータの取得
- 28. Bashでコマンドを出力する
- 29. スレッド - DOS出力を同期させよう
- 30. シェル/ dosアプリケーションからDelphiアプリケーションへの出力を取得
が重複する可能性[私はCから外部プログラムを実行し、その出力を解析するにはどうすればよい?](http://stackoverflow.com/q/43116/)、[システムから標準出力キャプチャするための最良の方法( )コマンドを別の関数に渡すことができるようにする](http://stackoverflow.com/q/125828/)、[コンソールの文字列をC言語の文字列に保存する方法(Windowsプラットフォーム)](http:// stackoverflow。 com/q/8959148 /)。 – outis