IDEからCgiスクリプト(C++)をデバッグしたいので、「デバッグモード」を作成します:ディスクからファイルを読み込み、このファイルに対応するいくつかの環境変数を設定し、Webサーバーによって呼び出されたときにスクリプトの残りの部分を実行します。それが可能かどうか、それがどうすればいいのですか?Linuxで自分のstdinにデータを書き込むことは可能ですか?
答えて
"自分の標準にプッシュ"することはできませんが、自分の標準にファイルをリダイレクトできます。
freopen("myfile.txt","r",stdin);
標準入力がSTDIN_FILENO
として定義されたファイル記述子であることは、誰もが知っています。その価値は0
であることが保証されていませんが、他に何も見たことがありません。とにかく、そのファイル記述子への書き込みを妨げるものは何もありません。
#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?
$
「もしもし?」例のために、ここでは、独自の標準入力に10件のメッセージを書き込む小さなプログラムです10のメッセージがすべて送信された後に入力したものです。次に、Ctrl + Dを押して、入力終了とプログラム終了を示します。
ファイルディスクリプタ0,1,2がすべてptyに結びついている端末にいるので、ややこしいことになります。あなたは、プログラム自体が読むことができるものは何も書いていません。このトピックについての説明はhttp://stackoverflow.com/q/1441251を参照してください。 – ephemient
真。あなたがttyから切り離されていれば、あなたの入力fdも閉じることができます。正確な解決策は、文脈に依存していると思います。パイプ/ dup2などを行うことは可能です。もし 'stdin'を再び開くと' std :: cin'などはどうでしょうか?ロボットが常に「もっと入力が必要」と言っていた映画を思い出させます;-)) –
- 1. ExcelマクロからAccessDBにデータを書き込むことは可能ですか?
- 2. Facebookアプリを自分のウェブサイトに埋め込むことは可能ですか?
- 3. 自分のスレッドでTcpSocketにデータを書き込む
- 4. execv *とstdinに書き込む
- 5. ChromeのJavascript REPLにWebGLを書き込むことは可能ですか?
- 6. Windowsの任意のメモリアドレスに書き込むことは可能ですか?
- 7. C#.NETでWin32 .dllファイルを書き込むことは可能ですか?
- 8. 物理アドレスlinuxに書き込むことができます
- 9. 複数のスレッドから同じファイルの異なる部分に書き込むことは可能ですか?
- 10. JSONファイルの古いデータを書き込むことができますが、追加のみ可能ですか?
- 11. 子プロセスのstdinに書き込む
- 12. ウィジェットのデータをグループなしのメインアプリCoredataに書き込むことは可能ですか?
- 13. ファイルを自分のプリントとして書き込むには?
- 14. 各ユーザーが自分のデータを書き込んで読み込むルールfire
- 15. 実行中の実行可能ファイルにデータを書き込む
- 16. Linuxカーネルモジュールの同じセクションにコードとデータを書き込む
- 17. パンダのデータフレームとともに、テキストとチャートをExcelに書き込むことは可能ですか?
- 18. HiveデータをVoraに読み込むことは可能ですか?
- 19. 3DデータをXSL-FOに埋め込むことは可能ですか?
- 20. ファイルに書き込むことはできませんが、テキストに書き込むことができます
- 21. Linuxでファイルに書き込む
- 22. QTcpSocketにデータを書き込むことができません
- 23. データベースにデータを書き込むことができません
- 24. チャネルネットにデータを書き込むことができません
- 25. FlaskにPyramidを組み込むことは可能ですか?
- 26. PythonをPHPに埋め込むことは可能ですか?
- 27. Formatterでファイルに書き込むことはできますか?
- 28. パターンイメージでUIBezierPathを埋め込むことは可能ですか?
- 29. Pythonでは、ジェネレータ(context_diff)の出力をテキストファイルに書き込むことは可能ですか?
- 30. ログファイルにアサートメッセージを書き込むことはできますか?
さて、stdioを仮定すると、[fungetc](http://pubs.opengroup.org/onlinepubs/7908799/xsh/ungetc.html)があります。しかし、これは1バイト以上のプッシュバックを保証するものではありません。 – ephemient
間違っています。できます:) –
よく。 'fungetc'は1バイトで動作します。 opが意図しているように、cgi入力には使用できません。 –