From e8b4b46109b8e69da60bd41e78651a14a858c769 Mon Sep 17 00:00:00 2001 From: flykhan Date: Wed, 30 Aug 2023 16:09:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20mplayer=20=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mainwindow.cpp | 25 +++++++++++++++++++++++++ mainwindow.h | 4 ++++ 2 files changed, 29 insertions(+) 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; }