ネイティブ ホスト メッセージングを使用する Chrome の拡張機能を作成しています。目標は、アプリ モードで実行しているときに Chrome が OS の既定のブラウザーでリンクを開くようにすることです。Chrome は、パイプを介してネイティブ アプリケーションの stdin および stdout へのネイティブ ホスト メッセージングを実装します。これで問題なく、拡張機能がネイティブ アプリケーションと通信できるようになりました。私が抱えている問題は、データの最初の 4 バイトに次の文字列の長さが含まれていることです。これには、私の目的では常に null 文字が含まれます。以下に strace の例を示します。これに対処する最善の方法は何ですか?可能であれば、入力が受信されるまでプログラムを停止する cin や getline などを使用したいと思います。
Process 27964 attached
read(0, "~\0\0\0\"http://stackoverflow.com/qu"..., 4096) = 130
read(0,
これは現在の C++ コードです。cin.get と fgets を使用してバリエーションを試しましたが、それらは入力を待機せず、ループが暴走した後に Chrome がプログラムを強制終了します。
#include <string>
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
for(;;) {
string message;
cin >> message;
if(!message.length()) break;
string cmd(string("xdg-open ") + message);
system(cmd.c_str());
}
return 0;
}