は、私は現在のTcl/Tkを使ってコマンドラインツール(espeak
)を包んだ、と私は今のところこれを考え出した:エグゼクティブexecvp - これを行うには良い方法はありますか?
load ./extensions/system.so
package require Tk
package require Tclx
set chid 0
proc kill {id} {
exec kill -9 $id
}
proc speak {} {
global chid
set chid [fork]
if {$chid == 0} {
execvp espeak [.text get 1.0 end]
}
}
proc silent {} {
global chid
kill $chid
}
execvp
:
#include <tcl.h>
#include <tclExtend.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
static int
execvp_command(ClientData cdata, Tcl_Interp *interp, int argc, const char* argv[])
{
if (argc == 1)
{
interp->result = "execvp command ?args ...?";
return TCL_ERROR;
}
execvp(argv[1], argv + 1);
return TCL_OK;
}
int System_Init(Tcl_Interp* interp)
{
if (Tcl_InitStubs(interp, "8.1", 0) == NULL)
return TCL_ERROR;
Tcl_CreateCommand(interp, "execvp", execvp_command, NULL, NULL);
Tcl_PkgProvide(interp, "system", "1.0");
return TCL_OK;
}
exec
(TCL)によって作成されたサブプロセスは、プロセスが死んだ場合に続けるように見えるので、私はexecvp
を必要とする理由は、(私はGUIのうち、INGの」^C
ことで、これを確認することができます)、一方、もし私がexecvp
,espeak
が正しく死ぬ。
このように、すべてのI は本当にこのスクリプトの必要性は、サブプロセスを開始し、要求に応じてそれを殺すことができるようにすることです。
Expectのようにこれを適切に実行できる別のライブラリがありますか?
右のとおりです - TclXは 'execl'コマンドで十分です。私は 'execv'を行うためにそれをラップする必要があります(なぜ、' execv'のためのTclX組み込みが私を超えているのでしょうか)。 [Cookie](http://www.celebritydietdoctor.com/wp-content/uploads/2009/08/the-cookie-monsters-change-in-diet.jpg)を参照してください。 – new123456