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. C#.NETでWin32 .dllファイルを書き込むことは可能ですか?
- 6. 複数のスレッドから同じファイルの異なる部分に書き込むことは可能ですか?
- 7. 実行中の実行可能ファイルにデータを書き込む
- 8. Linuxカーネルモジュールの同じセクションにコードとデータを書き込む
- 9. QTcpSocketにデータを書き込むことができません
- 10. PythonをPHPに埋め込むことは可能ですか?
- 11. Pythonでは、ジェネレータ(context_diff)の出力をテキストファイルに書き込むことは可能ですか?
- 12. パターンイメージでUIBezierPathを埋め込むことは可能ですか?
- 13. 5分ごとのテキストファイルにデータを書き込むMatlab
- 14. ハーフープでHDFSに他の部分を書き込むだけで、マッパーの部分をレデューサーに送ることは可能ですか?
- 15. sshのstdinにJavaを書き込む方法は?
- 16. Select()のプログラムでSTDINに書き込み
- 17. std :: stringに書き込むことはできますか?
- 18. ElasticSearch watchはMysqlにデータを書き込むことができます
- 19. 、speexファイルを埋め込むことは可能ですか?
- 20. シーク可能なAACオーディオストリームをFFMPEGでMP4ファイルに書き込む
- 21. CでLinux上のDVDにメモリデータを書き込む方法は?
- 22. Javaでファイルにデータを書き込むことができません
- 23. ファイルの新しい行にデータを書き込むことができない
- 24. OpenCV 3からLinuxにFFmpegでx264を書き込む
- 25. GCDAsyncSocket - 変更可能なデータを書き込むにはどうすればよいですか?
- 26. データでDXTreeListを書き込む
- 27. Bindで自分のDDNSを構築することは可能ですか?
- 28. エラーメッセージのテキストを動的に読み込むことは可能ですか?
- 29. Wordpressは.htaccessファイルは書き込み不可能ですが、書き込み可能です。
- 30. イメージをローカルにWebページに読み込むことは可能ですか?
さて、stdioを仮定すると、[fungetc](http://pubs.opengroup.org/onlinepubs/7908799/xsh/ungetc.html)があります。しかし、これは1バイト以上のプッシュバックを保証するものではありません。 – ephemient
間違っています。できます:) –
よく。 'fungetc'は1バイトで動作します。 opが意図しているように、cgi入力には使用できません。 –