# 运行时 / 系统与进程

## `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
