如何从C处理程序获取TCL脚本名称

时间:2014-01-13 10:03:19

标签: c tcl

我有一个可以执行TCL脚本的C应用程序,以及许多在C中实现并使用Tcl_CreateObjCommand注册的自定义TCL命令。 在命令的实现中,我想找出调用了我的命令的TCL脚本的文件名。即类似于“info script”但是从C调用(我不需要完整路径,只需文件名就足够了)。我命令中唯一的参数是

Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]

clientData为NULL。

那么有一个C函数,我可以只传递Tcl_Interp*并获取TCL脚本的文件名吗?或者如果它不存在,从TCL命令的实现调用Tcl_Eval*函数是否安全,因此它将是间接递归调用。

1 个答案:

答案 0 :(得分:3)

获取该信息的API只是:

if (Tcl_Eval(interp, "info script") == TCL_OK) {
    const char *scriptFile = Tcl_GetString(Tcl_GetObjResult(interp));
    // Will be OK until you evaluate another script; copy if necessary
    // ...
} else {
    // Something bad happened; unlikely for just “info script” in a normal interp
}

没有用于获取执行脚本名称的正式C API,因为通常不需要它。生成的字符串将是传递给source命令(或Tcl_EvalFile()或其关系)的任何内容。

通常,是的,从C中实现的Tcl命令调用Tcl_Eval是安全的。您认为如何实现ifwhilefor之类的命令?