【问题标题】:How to get TCL script name from a C handler如何从 C 处理程序获取 TCL 脚本名称
【发布时间】:2014-01-13 18:32:19
【问题描述】:

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

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

clientData 为 NULL。

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

【问题讨论】:

    标签: c tcl


    【解决方案1】:

    获取该信息的 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 这样的命令是如何实现的?

    【讨论】:

      猜你喜欢
      • 2017-07-14
      • 1970-01-01
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多