diff --git a/mainwindow.cpp b/mainwindow.cpp index ddc83bc..913fb16 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -7,6 +7,7 @@ MainWindow::MainWindow(QWidget *parent) { ui->setupUi(this); initMainWindow(); // 初始化主界面 + mplayerInit(); // 初始化 mplayer } MainWindow::~MainWindow() @@ -55,4 +56,28 @@ void MainWindow::mplayerInit() // 创建一个无名管道 int fd[2]; pipe(fd); + + // 创建有名管道 + mkfifo("fifo_cmd",0666); + + // 创建 子进程启动 mplayer + pid_t pid = fork(); + if(pid == 0) // 子进程 + { + // 重定向标准输出 + dup2(fd[1],1); + // 使用 exec 启动 mplayer + execlp("mplayer","mplayer","-idle","-slave","-quiet","-input","file=fifo_cmd","./song/01.mp3",NULL); + _exit(-1); // 异常退出 + } + else if(pid>0) // 父进程 + { + // 打开管道 + // 以写的方式打开(阻塞到某进程 以读的方式打开) + fifo_fd = open("fifo_cmd",O_WRONLY); + if(fifo_fd < 0){ + perror("open"); + return 0; + } + } } diff --git a/mainwindow.h b/mainwindow.h index f27d0e3..e507986 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -4,6 +4,10 @@ #include #include +#include +#include +#include +#include QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; }