1

ネイティブ ホスト メッセージングを使用する 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;
}
4

1 に答える 1