[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 メーリングリストの案内