默默的大默默 发表于 2016-06-21 11:53

回复 1# 5doumi

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]
查看完整版本: 我想在LINUX系统中的C里边调用一个可执行程序 这个可执行程序是可交互的,即运行过程