文章目录
- 第十一章 本地进程间通信(管道) - OPEN 命令管道示例
- OPEN 命令管道示例
- `OPEN Errors`
第十一章 本地进程间通信(管道) - OPEN 命令管道示例
OPEN 命令管道示例
以下是有效的命令管道OPEN
语句。每个示例指定 10
秒的超时:
OPEN "|CPIPE|1":"/nethome/myprog":10 // using shell, no argsOPEN "|CPIPE|1":("/nethome/myprog":/WRITE):10 // using shell, no args, WRITEOPEN "|CPIPE|2":/COMMAND="/nethome/myprog":10 // no shell, no argsOPEN "|CPIPE|3":("":/COMMAND="/nethome/myprog"):10 // no shell, no argsOPEN "|CPIPE|4":(/COMMAND="/nethome/myprog":/ARGS=arg1):10 // no shell, 1 argOPEN "|CPIPE|5":("/nethome/myprog":/ARGS=arg1):10 // no shell, 1 argOPEN "|CPIPE|6":("/nethome/myprog":/ARGS=arg1:/WRITE):10 // no shell, 1 arg, WRITEOPEN "|CPIPE|7":(/COMMAND="/nethome/myprog":/ARGS=arg1,arg2):10 // no shell, 2 argsOPEN "|CPIPE|8":(/COMMAND="/nethome/myprog":/ARGS=args...:/WRITE):10 // no shell, args array, WRITE
在 Windows
系统上,参数可以包含空格或双引号 ("
) 字符。在这些情况下,可以将参数加引号,并且可以通过加倍来转义文字双引号字符:
OPEN "|CPIPE|9":("/nethome/myprog":/ARGS="string with blanks"):10OPEN "|CPIPE|10":("/nethome/myprog":/ARGS="string with literal "" character"):10
OPEN Errors
如果对非 IPC
设备发出带有QW
参数的OPEN
命令,当您尝试写入此设备时发生错误。
以下 UNIX®
示例打开一个到 lp
程序的输出管道,在本例中该程序的路径名为/usr/bin/lp
。然后它通过此管道将全局^TEXT的输出发送到打印机。
print ; Send the first layer of global ^TEXT to the printer. SET IO="/usr/bin/lp"OPEN IO:"QW" ; Open the pipe to lp USE IO WRITE "The first layer of ^TEXT",! ; Print the title ; . . .; Print each line, using $ORDER on the global ^TEXTUSE IO WRITE !,"The End.",#CLOSE IO ; close the pipe, spooling the file to lpsched QUIT
可以更改此示例,以便OPEN
命令将参数传递给 lp
程序。例如,要指定lp
应将输出发送到名为 Laserjet
的打印机设备,可以将SET
命令替换为以下内容:
SET IO="/usr/bin/lp -dlaserjet"
以下示例展示了如何从外部程序读取数据。此处,该进程打开一个到 UNIX®
程序 who
的输入管道,以便它可以读取当前登录到 UNIX®
的所有用户的 ID
。
getids ; read the login IDs of everybody currently on SET IO="/usr/bin/who"SET $ZTRAP="EOT"KILL LOGINS OPEN IO:"Q"; note that "R" (the default) is understood SET users=0FOR I=0:0 {USE IOREAD USERSET users=users+1SET LOGINS(USER)=""}QUIT
EOT SET $ZTRAP=""USE 0WRITE !,USERS," is/are currently logged on.",!CLOSE IOQUIT
在 Windows
系统上,当 CPIPE OPEN
程序参数指定 /COMMAND
或 /ARGS
时,系统使用 CreateProcess()
来运行该命令。如果 CreateProcess()
失败,则 OPEN
将失败并显示错误。 GetLastError()
值可通过$SYSTEM.Process.OSError()
获得。
在 UNIX®
系统上,当 CPIPE OPEN
程序参数指定 /COMMAND
或 /ARGS
时,系统会创建一个新进程,该进程发出 exec()
来运行该命令。如果 exec()
失败, OPEN
将失败并显示错误。 exec() errno
可通过$SYSTEM.Process.OSError()
获得。