2

プログラムが終了する前に、コンソール アプリケーションの出力をテキスト ファイルに記録するようにしようとしています。これは、コンソール アプリケーション (tool.exe) を起動する GUI プログラムです。問題は、CTRL + C を使用してコンソール アプリケーションを終了していることです。このコンソール アプリケーションも変更できません。これを行ういくつかの方法を試しましたが、どれもうまくいかないようです( tool.exe > output.txt )。

どのアプローチを取るべきか、誰かが私を正しい方向に向けることができますか? それは大歓迎です。

編集:

ファイルは作成されますが、空であり、データを受け取りません。私が気付いたのは、自分でコマンドラインからツールを実行すると機能するということです。例えば。c:\>tool.exe > output.txtただし、GUI アプリケーションから実行した場合、これは機能しません。

ツールを実行するために使用しているコードは次のとおりです。

    strcpy (tool, "\" start /D \"");
    strcat (tool, toolLocation);
    strcat (tool, "\" tool.exe > output.txt\"");
    system (tool);

これにより、tool.exe が実行され、output.txt が正常に作成されますが、ファイルには何も出力されません。

EDIT2:

実際に起こっていることは、 を使用しているためstart、 の代わりに>output.txtが出力されていることだと思います。これにより、空のファイルが作成される理由が説明されます。Start は、実行中の新しいコマンドラインを実行しているだけです。問題は、どうすればこの問題を回避できますか?starttool.exetool.exe

4

3 に答える 3

0

試す:

#include <signal.h>
void signal_handlerkill(int sig)
{
  //Do Soemthing
  exit(1);
}

int main()
{
  signal(SIGINT, signal_handlerkill); //Connect the interrupt signal (^C) to the function
  //Do your code here
  return 0;
}

それでもうまくいかない場合は、こちらをご覧になることをお勧めします。具体的には:

// crt_signal.c
// compile with: /c
// Use signal to attach a signal handler to the abort routine
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <tchar.h>

void SignalHandler(int signal)
{
    printf("Application aborting...\n");
}

int main()
{
    typedef void (*SignalHandlerPointer)(int);

    SignalHandlerPointer previousHandler;
    previousHandler = signal(SIGABRT, SignalHandler);

    abort();
}
于 2012-05-23T14:57:36.863 に答える
0

ファイルにリダイレクトせずにアプリケーションを実行した場合、ctrl+c を押したときにコンソールに必要な出力が表示されますか?

そうしないと、アプリケーションを変更できないため、何もできません。

アップデート

必要なのは、stdout と stderr をファイルにリダイレクトすることです。私はやったことはありませんが、jamesdlin はやっているようです。彼のコメントを見てみましょう。

あなたが試すことができるのは、starttry using をcmd.exe直接使用する代わりです。

于 2012-05-23T15:26:32.997 に答える