【发布时间】:2011-02-02 10:33:22
【问题描述】:
我需要创建一个 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 中的进程之间可靠地交换数据?
【问题讨论】: