Я пишу расширение для Chrome, которое использует собственную передачу сообщений хоста. Цель состоит в том, чтобы открывать ссылки Chrome в браузере по умолчанию ОС при работе в режиме приложения. Chrome реализует передачу собственных хостов через каналы в stdin и stdout собственного приложения. Все это хорошо и хорошо, и у меня есть расширение, говорящее с родным приложением. Проблема, с которой я сталкиваюсь, состоит в том, что первые 4 байта данных содержат длину следующей строки, которая для моих целей всегда будет содержать нулевые символы. Пример strace показан ниже. Каков наилучший способ справиться с этим? Я хотел бы использовать что-то вроде cin или getline, что остановит программу до тех пор, пока вход не будет получен, если это возможно.Работа с нулевыми символами в stdin в C++
Process 27964 attached
read(0, "~\0\0\0\"http://stackoverflow.com/qu"..., 4096) = 130
read(0,
Это текущий код на C++. Я пробовал варианты с помощью cin.get и fgets, но они не ждут ввода и Chrome убивает программу после того, как цикл запускается amok.
#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;
}
Пожалуйста, разместите код. –