int gAPXWritefd, gAPXReadfd;
void apx_ExecCli()
{
pid_t pid;
int fd_in, fd_out;
if (pipe(fd_in) < 0 || pipe(fd_out))
{
return;
}
pid = fork();
if (pid == 0)
{
char cmd;
//
close(fd_in);
close(fd_out);
dup2(fd_in, STDOUT_FILENO);
dup2(fd_out, STDIN_FILENO);
close(fd_in);
close(fd_out);
execl("/usr/local/bin/bcmcli", NULL);//启动要执行的交互程序
}
else
{
char buffer;
int status, i;
FILE* fp;
sleep(1);
//
close(fd_out);
close(fd_in);
//开始读写
write(fd_out, "y\n", strlen("y\n"));
write(fd_out, "fabric\n", strlen("fabric\n"));
for (i = 0; i < APX_IFNUM; i++)
{
snprintf(buffer, sizeof(buffer), "show counters chang same z xe%d\n", i + 1);
write(fd_out, buffer, strlen(buffer));
}
write(fd_out, "exit\n", strlen("exit\n"));
write(fd_out, "exit\n", strlen("exit\n"));
close(fd_out);
fp = fdopen(fd_in, "r");
buffer = 0;
while (fgets(buffer, 2048, fp))
{
apx_RecordData(buffer);
buffer = 0;
}
//结束读写
fclose(fp);
close(fd_in);
wait(&status);
}
return;
}
在子进程启动要交互的程序,创建两个管道,分别做为子进程的标准输入输出,在父进程读写管道就可完成交互功能。
页:
1
[2]