Мне нужно создать приложение 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?