Как обмениваться двоичными данными между процессами в Linux

Мне нужно создать приложение linux, которое будет сканировать беспроводную сеть, поместить результат в структуру и каким-то образом отправить его другому, главному приложению, которое будет использовать данные. Моя первоначальная идея заключалась в том, чтобы создать канал в основном приложении, разветвить и запустить другой процесс с помощью execl, который может писать в канал. Примерно так:

pid_t pid = NULL;
int pipefd[2];
FILE* output;
char line[256];

pipe(pipefd);
pid = fork();
if (pid == 0)
{
// Child
  close(pipefd[0]);
  dup2(pipefd[1], STDOUT_FILENO);
  dup2(pipefd[1], STDERR_FILENO);
  execl("/sbin/wifiscan", "/sbin/wifiscan", (char*) NULL);
}

//Only parent gets here. Listen to what the wifi scan says
close(pipefd[1]);
output = fdopen(pipefd[0], "r");

while(fgets(line, sizeof(line), output))
{
//Here we can listen to what wifiscan sends to its standard output
}

Однако это не будет работать с двоичными данными, если на выходе появляется двоичный 0. Так что я мог либо отформатировать вывод приложения wifiscan в текст, отправить его по конвейеру и проанализировать в основном приложении, либо сделать это более разумным способом, о котором я пока не знаю.

Каковы другие средства для надежного обмена данными между процессами в Linux?

6
задан Patryk 2 February 2011 в 10:33
поделиться