12

IDE から cgi スクリプト (C++) をデバッグしたいので、「デバッグ モード」を作成したいと思います。 Web サーバーによって呼び出されたスクリプト。それは可能ですか?可能であれば、どうすればそれを行うことができますか?

4

2 に答える 2

12

「自分の stdin にプッシュ」することはできませんが、ファイルを自分の stdin にリダイレクトすることはできます。

freopen("myfile.txt","r",stdin);
于 2012-06-20T20:50:28.603 に答える
2

標準入力が として定義されたファイル記述子であることは誰もが知っていますSTDIN_FILENO。その値は であるとは限りませんが0、他に見たことはありません。とにかく、そのファイル記述子への書き込みを妨げるものは何もありません。例として、10 個のメッセージを独自の標準入力に書き込む小さなプログラムを次に示します。

#include <unistd.h>
#include <string>
#include <sstream>
#include <iostream>
#include <thread>

int main()
{
    std::thread mess_with_stdin([] () {
            for (int i = 0; i < 10; ++i) {
                std::stringstream msg;
                msg << "Self-message #" << i
                    << ": Hello! How do you like that!?\n";
                auto s = msg.str();
                write(STDIN_FILENO, s.c_str(), s.size());
                usleep(1000);
            }
        });

    std::string str;
    while (getline(std::cin, str))
        std::cout << "String: " << str << std::endl;

    mess_with_stdin.join();
}

それを に保存しtest.cpp、コンパイルして実行します。

$ g++ -std=c++0x -Wall -o test ./test.cpp -lpthread
$ ./test 
Self-message #0: Hello! How do you like that!?
Self-message #1: Hello! How do you like that!?
Self-message #2: Hello! How do you like that!?
Self-message #3: Hello! How do you like that!?
Self-message #4: Hello! How do you like that!?
Self-message #5: Hello! How do you like that!?
Self-message #6: Hello! How do you like that!?
Self-message #7: Hello! How do you like that!?
Self-message #8: Hello! How do you like that!?
Self-message #9: Hello! How do you like that!?
hello?
String: hello?
$ 

「こんにちは?」part は、10 件すべてのメッセージが送信された後に入力したものです。Ctrl次に+を押しDて、入力の終了を示し、プログラムを終了します。

于 2012-06-20T21:01:38.723 に答える