# 运行时 / 系统与进程 ## `sysdbfread(alias, file_name, value, is_col_info)` 读取本地DBF格式数据文件的内容,或者读取本地DBF格式数据文件的结构定义。 | 参数 | 类型 | 说明 | | ------------- | ------ | ---------------------- | | `alias` | string | 字符串类型,目录别名。 | | `file_name` | bool | 字符串类型,文件名称。 | | `value` | string | object | | `is_col_info` | bool | object | 返回:bool ## `sysdbfwrite(alias, file_name, value, col_info)` 将数据导出为DBF的格式的数据文件。 | 参数 | 类型 | 说明 | | ----------- | ------ | ---------------------------------------------------------------------------- | | `alias` | string | 字符串类型,目录别名。 | | `file_name` | array | 字符串类型,文件名称。 | | `value` | string | 输出的数据内容,必须有字符串列名。 | | `col_info` | array | 数组,数据导出的结构定义,若缺省则和exportfile的行为一致,采用自动判别类型。 | 返回:bool ## `sysErrorMessage(code)` 返回指定代码表示的系统错误信息。 | 参数 | 类型 | 说明 | | ------ | ---- | -------------- | | `code` | int | 整数,提示代码 | 返回:string ## `sysexec(prog, cmdline, startupdir, wait, code, waitms, return_value)` 创建子进程执行操作系统命令。在指定目录下使用指定文件执行指定命令。指定目录可以为nil;指定命令可以为字符串,比如”py -V”,也可以为数组,比如array(“py”,”-V”)。 注:本定义方式功能只在新一代客户端版本中支持。 旧版本中用户请参考函数原定义说明:FAQ:SysExec 另外,关于code中返回的退出码(返回码),即为子进程终止时通过SysTerminate传递出来的退出码,当无此命令时,默认为0。 | 参数 | 类型 | 说明 | | -------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `prog` | string | 字符串,执行命令的文件所在路径。 | | `cmdline` | string | 字符串或数组,命令行命令。 例如:tsl abcd.tsl,也可以分割的数组,例如array(“tsl”,”abcd.tsl”) | | `startupdir` | string | NIL或字符串,执行命令时所处的目录路径。 | | `wait` | bool | object | | `code` | array | 数值或数组,输出参数,进程的退出码。当存在管道输出且采用阻塞方式运行进程时, code为数组,下标”code”为返回码,”out”下标是运行的进程的标准输出里输入的内容。 另,在阻塞模式下,当等待超时的情况下,也还可以使用SysexecReadpipe读取后续输出的信息。 | | `waitms` | int | 正整数,可选参数,等待阻塞的毫秒数。 | | `return_value` | any | 数值,进程句柄。 | 返回:int ## `sysexecreadpipe(process_handle)` 获得指定进程所在管道的输出内容。参数缺省时,获得默认管道的输出内容。 在阻塞式运行sysexec的情况下,可以直接获得内容,在非阻塞式运行外部进程的时候,需要多次进行循环读取输出。 | 参数 | 类型 | 说明 | | ---------------- | ---- | -------------------------- | | `process_handle` | any | 数值,可选参数,进程句柄。 | 返回:string ## `sysexecsetenvs(envs, addsysenv)` 重新设置子进程的环境变量,使得子进程与主进程的环境变量不一样,应用于Sysexec创建的子进程。不设置的情况下子进程的环境变量与主进程一致。 | 参数 | 类型 | 说明 | | ----------- | ------- | ---- | | `envs` | array | nil | | `addsysenv` | 0\|1\|2 | 1\\ | 返回:int ## `sysExecWritePipe(content)` 向指定进程所在管道写入输入内容。参数缺省时,向默认管道写入输入内容。 管道的长度是有限的,当管道长度被占用了,需要等待空间被释放后再进行(即时读取管道信息可以被释放),即它是一个阻塞式的过程。 | 参数 | 类型 | 说明 | | --------- | ------ | ----------------------------------------------------- | | `content` | string | 字符串,输入内容。比如输入”=quit\r\n”可以退出当前进程 | 返回:int ## `sysGetFuncdepends(fun, flag, cfuninfo, binclassinfo)` 获取目标函数或类的依赖关系。 可以用于查找用户函数、公用函数与本地函数的依赖,但无法查找系统函数。当查找本地函数时,函数文件后缀必须是.tsf。 服务器执行时,由于权限问题,返回结果可能并不完整。用户可以使用本地执行或者rdo2执行来获取完整的依赖信息。 | 参数 | 类型 | 说明 | | -------------- | ---------------------------------------------- | ------------------------------------------------------------------------------ | | `fun` | TFUNCTION | 查找依赖的函数或者类 | | `flag` | int | 整型,缺省值为0,查找的依赖关系类型如下(若多选时,可以将相应取值相加后传入): | | `cfuninfo` | 依赖不检查子函数,仅通过函数调用等规则查找依赖 | 数组,输出值,返回依赖的二进制函数信息 | | `binclassinfo` | 显示所有被依赖的子函数,缺省只显示主函数 | 数组,输出值,返回依赖的二进制类信息 | 返回:funInfo ## `sysGetPidOfCom(obj)` 获得COM对象对应的进程ID,由于com的限制,仅当进程ID<65535才有效,一旦返回值为65535表示进程ID超过65535。 | 参数 | 类型 | 说明 | | ----- | ------ | --------- | | `obj` | ComObj | Com对象。 | 返回:int ## `sysGetProcessCmdLine(pid, return_value)` 获取指定进程的执行命令行 | 参数 | 类型 | 说明 | | -------------- | ------ | ---------------------------------------------------- | | `pid` | int | 整数,进程ID | | `return_value` | string | 获取成功,返回指定进程的执行命令;否则,返回空字符串 | 返回:string ## `sysGetProcessCmdLinew(pid, return_value)` 获取指定进程的cmd执行命令,返回结果为宽字节字符串 | 参数 | 类型 | 说明 | | -------------- | ---- | --------------------------------------------------------------------------- | | `pid` | int | 整数,进程ID | | `return_value` | int | 获取成功,返回指定进程的cmd执行命令,格式为宽字节字符串;否则,返回空字符串 | 返回:string ## `sysGetProcessNamePath(pid, return_value)` 获取指定进程路径,若无法获得路径返回进程的名称 | 参数 | 类型 | 说明 | | -------------- | ------ | ---------------------------------------------------------------------------- | | `pid` | int | 整数,进程ID | | `return_value` | string | 获取成功,返回指定进程路径,若无法获得路径返回进程的名称;否则,返回空字符串 | 返回:string ## `sysGetProcessNamePathw(pid, return_value)` 获取指定进程路径,返回结果为宽字节字符串 | 参数 | 类型 | 说明 | | -------------- | ---- | ------------------------------------------------------------------ | | `pid` | int | 整数,进程ID | | `return_value` | int | 获取成功,返回指定进程路径,格式为宽字节字符串;否则,返回空字符串 | 返回:string ## `sysGetProcessPriority(pri, pid, return_value)` 获取进程优先级 | 参数 | 类型 | 说明 | | -------------- | ---- | ------------------------------------------------------ | | `pri` | int | 变参,整数,进程优先级 | | `pid` | int | 整数,可选参数,进程ID。未指定时默认获取当前线程优先级 | | `return_value` | int | 返回值为0,获取成功;否则,获取失败 | 返回:int ## `sysGetThreadName(tid, return_value)` 获取线程名称 | 参数 | 类型 | 说明 | | -------------- | ------ | ---------------------------------------------------- | | `tid` | int | 整数,可选参数,线程ID。未指定时默认获取当前线程名称 | | `return_value` | string | 获取成功,返回线程名称;否则,返回空字符串 | 返回:string ## `sysGetThreadPriority(pri, tid, return_value)` 获取线程优先级 | 参数 | 类型 | 说明 | | -------------- | ---- | ------------------------------------------------------ | | `pri` | int | 变参,整数,线程优先级 | | `tid` | int | 整数,可选参数,线程ID。未指定时默认获取当前线程优先级 | | `return_value` | int | 返回值为0,获取成功;否则,获取失败 | 返回:int ## `sysGetThreads(pid, return_value)` 获取进程内的线程列表 | 参数 | 类型 | 说明 | | -------------- | ----- | ------------------------------------------------------------ | | `pid` | int | 整数,可选参数,进程ID。未指定时默认获取当前进程内的线程列表 | | `return_value` | array | 获取成功,返回线程ID列表;否则,返回空数组 | 返回:array ## `sysHandleOfPid(pid, rights, inherithandle, return_value)` Windows上获取进程id对应的句柄,Linux上获取指定文件ID的复制ID。得到的句柄可用函数FAQ:SysCloseHandle进行关闭。 | 参数 | 类型 | 说明 | | --------------- | ---- | ---------------------------------------------------------------------------------------------------------------------- | | `pid` | int | 整数,进程ID | | `rights` | int | 整数,可选参数,设置进程句柄权限,Linux上无效。常见的权限设置值如下: 更多说明,可参考微软官方文档:处理安全和访问权限 | | `inherithandle` | bool | 布尔值,可选参数,是否继承,Linux上无效 | | `return_value` | 16 | 获取成功,返回进程句柄;否则,返回0 | 返回:IntPtr\|int ## `sysKill(pid, code, return_value)` 终止进程。在WINDOWS上,和FAQ:SysTerminate不同之处是,SysTerminate参数为进程句柄,SysKill参数是进程ID。LINUX上两者一致 | 参数 | 类型 | 说明 | | -------------- | ---- | ---------------------------------- | | `pid` | int | 整数,进程ID | | `code` | int | 整数,可选参数,终止进程返回的代码 | | `return_value` | bool | object | 返回:bool ## `sysPidOfHandle(handle, return_value)` 根据进程句柄获取进程ID。在Linux上,返回和进程句柄值相同的整数 | 参数 | 类型 | 说明 | | -------------- | ---- | --------------------------------- | | `handle` | int | 进程句柄 | | `return_value` | int | 获取成功,返回进程ID;否则,返回0 | 返回:int ## `sysPidOfTid(tid, return_value)` 获取线程所属进程ID | 参数 | 类型 | 说明 | | -------------- | ---- | --------------------------------- | | `tid` | int | 整数,线程ID | | `return_value` | int | 获取成功,返回进程ID;否则,返回0 | 返回:int ## `sysPPid(pid, return_value)` 获得进程的父进程ID | 参数 | 类型 | 说明 | | -------------- | ---- | ---------------------------------------------------------- | | `pid` | int | 整数,可选参数,进程ID。未指定时默认获取当前进程的父进程ID | | `return_value` | int | 获取成功,返回父进程ID;否则,返回0 | 返回:int ## `sysSetProcessPriority(pri, pid, return_value)` 设置进程优先级 | 参数 | 类型 | 说明 | | -------------- | ---- | ------------------------------------------------------ | | `pri` | int | 整数,进程优先级 | | `pid` | int | 整数,可选参数,进程ID。未指定时默认设置当前进程优先级 | | `return_value` | int | 返回值为0,设置成功;否则,设置失败 | 返回:int ## `sysSetThreadName(name, tid, return_value)` 设置线程名称 | 参数 | 类型 | 说明 | | -------------- | ------ | ---------------------------------------------------- | | `name` | string | 字符串,要设置的名称 | | `tid` | int | 整数,可选参数,线程ID。未指定时默认设置当前线程名称 | | `return_value` | int | 返回值为0,设置成功;否则,设置失败 | 返回:int ## `sysSetThreadPriority(pri, tid, return_value)` 设置线程优先级 | 参数 | 类型 | 说明 | | -------------- | ---- | ------------------------------------------------ | | `pri` | int | 线程优先级 | | `tid` | int | 可选参数,线程ID。未指定时默认设置当前线程优先级 | | `return_value` | int | 返回值为0,设置成功;否则,设置失败 | 返回:int ## `syssettsllibpath(path_list)` 设置函数库查找路径(支持分号分隔的多个目录)。 | 参数 | 类型 | 说明 | | ----------- | ----- | -------------------------- | | `path_list` | array | 路径列表字符串(分号分隔) | 返回:string ## `sysWaitForSingleObject(object, wait_ms)` 等待占有一个对象,例如互斥对象。支持windows和linux的进程 | 参数 | 类型 | 说明 | | --------- | ---- | ------------------------------------ | | `object` | int | 整数,对象名柄 | | `wait_ms` | int | 整数,等待的毫秒数,-1则为永远等待。 | 返回:int ## `sysGetMemoryUsage()` 获取系统内存状态 返回:array,tablearray ### 示例 ```tsl // 获得系统内存状态 return sysGetMemoryUsage(); ``` ## `sysGetProcessMemoryUsage(pid)` 获取进程的内存使用状态 | 参数 | 类型 | 说明 | | ----- | ------- | ---------------------------------------------------------- | | `pid` | integer | 整数,可选参数,进程ID。未指定时默认获取自身的内存使用状态 | 返回:array ### 示例 ```tsl // 获得自身的内存使用状态 return sysGetProcessMemoryUsage(); ``` ## `sysLibCVersion()` 获取系统中C语言支持库的版本 返回:string ### 示例 ```tsl // 获得C语言支持库的版本 return sysLibCVersion(); // 返回:"10.0.26100.8521" ``` ## `processField(field_name, call_back)` 对相应的数据进行处理,注意,该函数主要用于客户端结果处理,不提供给用户程序编辑。 | 参数 | 类型 | 说明 | | ------------ | ------ | ---------------- | | `field_name` | string | 字符串,字段名称 | | `call_back` | string | 字符串,函数名称 | 返回:array,tablearray ## `processFirstField(call_back)` 对相应数据进行处理。注意,该函数主要用于客户端结果处理,不提供给用户程序编辑。 | 参数 | 类型 | 说明 | | ----------- | ------ | ---------------- | | `call_back` | string | 字符串,函数名称 | 返回:array,tablearray