[Armadillo:06156] Re: オーディオ プレイヤーの停止
TATENO Hiroyuki
email@hidden
2010年 11月 15日 (月) 10:55:53 JST
舘野です。
> fork() を使用すれば、PIDは、返却値として得る事が出来ますが、
> できれば、より簡単な、system() で処理出来ないかと思っています。
おそらく
system("/bin/sh -c '/path/to/aplay HOGE &; echo $! > /tmp/aplay.pid'");
/* aplayへのフルパス */
とかすれば、/tmp/aplay.pidに対象のPIDが書かれると思います。
が、system()関数呼び出しはすぐに戻ってきます(処理終了を待たない)。
処理終了までロックして欲しい場合には、上記処理をシェルスクリプトに
してシグナル待ちをする等もう少し工夫が必要です。
スクリプトファイル:exec_aplay
------------------------------
#!/bin/sh
CMD=/path/to/aplay # aplayのフルパス
PID_FILE=/tmp/aplay.pid
param=$1
signal_handler()
{
if [ -f "${PID_FILE}" ]; then
/bin/rm ${PID_FILE}
fi
}
trap 'signal_handler' 0
${CMD} ${param} &
pid=$!
echo ${pid} > ${PID_FILE}
wait ${pid}
------------------------------
呼び出し側
------------------------------
system("/path/to/exec_aplay HOGE"); /* スクリプトファイルへのパス */
------------------------------
ここいらへんの話は、armadilloというよりはLinux/POSIXの知識に
なってきますので、fork/exec/signal等を調べてみる事をお勧めします。
#シェル(bash)も覚えておくと、より理解が深まります。
---
TETENO Hiroyuki
armadillo メーリングリストの案内