曾几何时,一队人坐下来用C编写了一个应用程序,在VAX上运行VMS.这是一项相当重要的工作,并在LargeCo开展了一项相当重要的后端业务.这整个shebang工作得很好,二十五年后,它仍在继续努力并做到这一点.
时间的流逝,人们退休,恰巧的是,最后男子站在已经上交的钥匙新一代谁-我们想象的-小于高兴地发现自己老得足以当自己的弟弟系统的看护人.然而,由于他们处理Ultra Legacy Systems的想法并不令人沮丧,他们无法证明更换古老应用程序的成本是合理的.
LMS发现我habla unix并将这个问题提交给我.因为我habla unix但是不说CI会总结并把它交给你.长话短说:
LMS希望将用VMS编写的LegacyApp移植到unix.资源?他能看的任何书吗?他可以跟人说话吗?
我试图在python上运行VMS上运行一个非常简单的CGI服务器.
import sys
from BaseHTTPServer import HTTPServer
from CGIHTTPServer import CGIHTTPRequestHandler
server_address=('',8080)
httpd = HTTPServer(server_address, CGIHTTPRequestHandler)
httpd.serve_forever()
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是它正确地提供静态内容并且它试图执行CGI-s(它在正确的位置,我已经将这些CGI与Apache一起使用,因此该部分绝对不是问题)但它挂在某处.这是我对VMS不了解的事情.
任何指向正确方向的指针都将受到赞赏.:)
更新:简化,我需要在VMS上执行程序并以某种方式获取该程序的结果.任何对执行子进程和获取结果的引用对我来说都足够了.
我们在OpenVMS Alpha和Integrity服务器上运行批处理文件.到目前为止,它们都是用COBOL编写的.您可以想象,有很多原因导致无法维持该过程.
与此同时,我们拥有一支使用Eclipse并且非常了解Java的开发人员团队.是否可以将Eclipse与OpenVMS一起使用?
我正在尝试替换VMS上的文本文件中的特定行.通常,这是一个简单的Perl单线程.但是当替换方是包含VMS路径的符号时,我遇到了问题.这是文件和我尝试的内容:
file1.txt的内容:
foo
bar
baz
quux
Run Code Online (Sandbox Code Playgroud)
尝试替换第3行:
$ mysub = "disk$data1:[path.to]file.txt"
$ perl -pe "s/baz/''mysub'/" file1.txt
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
foo
bar
disk:[path.to]file.txt
quux
Run Code Online (Sandbox Code Playgroud)
看起来Perl过于苛刻,用$data1
一个不存在的变量的内容替换了路径的一部分(即什么都没有).运行调试器确认了这一点.我没有提供/e
,所以我认为Perl应该直接替换文本.有没有办法让Perl这样做?
(另请注意,我可以在linux命令行中重现类似的行为.)
我正在尝试将C
源文件从 vms alpha复制到 Windows 机器,以便更轻松地编辑代码。(VMS 编辑器只是一个文本编辑器,如果有语法高亮等功能会很好)
我可以使用 Exceed FTP 复制它,这可以处理带有 vms 版本后缀的重复文件名的问题:
但是当我打开一个我传输的文件时,所有的换行符都丢失了,整个文件只有一行。
任何人都可以为此推荐解决方案或提供任何提示吗?
提前致谢
附:我需要能够将文件复制回 vms 并仍然保持格式。
http://h71000.www7.hp.com/doc/731final/documentation/pdf/ovms_731_file_app.pdf (第 5-1 节)上的文档表示文件名应如下所示:
node::device:[root.][directory-name]filename.type;version
Run Code Online (Sandbox Code Playgroud)
其中大多数是可选的(例如节点、设备、版本) - 不确定哪些以及如何在正则表达式中正确编写它们(包括目录名称):
DISK1:[MYROOT.][MYDIR]FILE.DAT
DISK1:[MYDIR]FILE.DAT
[MYDIR]FILE.DAT
FILE.DAT;10
NODE::DISK5:[REMOTE.ACCESS]FILE.DAT
Run Code Online (Sandbox Code Playgroud) 我在vms中有一个工具xyz.我想获取安装它的位置.例如在unix中我们可以通过使用哪个命令来实现这一点.所以请帮我vms相当于这个命令.
我有一个运行的测试脚本会产生一些错误,如下所示,我希望这些错误.反正我可以阻止它们出现在屏幕上吗?我用
$ write sys$output
Run Code Online (Sandbox Code Playgroud)
显示是否存在预期错误.
我试着用
$ DEFINE SYS$ERROR ERROR.LOG
Run Code Online (Sandbox Code Playgroud)
但是这会将我的整个错误输出日志更改为此,如果这是正确的处理方式,我可以在脚本的某端以某种方式取消设置吗?
[错误示例]
%DCL-E-OPENIN, error opening TEST$DISK:[AAA]NOTTHERE.TXT; as input
-RMS-E-FNF, file not found
%DCL-E-OPENIN, error opening TEST$DISK:[AAA]NOTTHERE.TXT; as input
-RMS-E-FNF, file not found
%DCL-W-UNDFIL, file has not been opened by DCL - check logical name
Run Code Online (Sandbox Code Playgroud) 我构建了一个简单的程序,尝试打印命令行参数.
代码如下,我构建了一个可执行文件(TEST.EXE).
int main(int argc, char *argv[])
{
int i;
printf("%s\n",argv[0]);
for (i = 1; i < argc; i++)
printf("argument %d: %s\n", i, argv[i]);
exit (EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)
我尝试运行TEST.EXE并打印参数但失败.
命令的结果RUN TEST.EXE test1 test2
:
%DCL-W-MAXPARM, too many parameters - reenter command with fewer parameters
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能打印"test1"和"test2"?
如何在VMS上列出历史命令?
在linx上,我们可以使用"历史".
我在VMS上找不到相应的命令.
任何帮助将不胜感激.
谢谢
有人可以解释我如何在OpenVMS上进行汇编开发,我已经在OpenVMS上用C开发了,我刚开始在Windows和Linux中进行汇编.如何编译,链接和运行.asm程序?
我们有一个基于OpenVMS的传统COBOL应用程序 - 我们对配置没有一个清晰的认识.在这种情况下,通过"配置",我说的是:
上面的1是一个未知的东西似乎很奇怪,但随着时间的推移,可执行文件已经"来去匆匆"(并且许多仍然被使用).其中的可执行文件构成的应用程序,因为它存在的知识,今天,因为知识,其中的可执行文件,不再需要在时间已丢失不得而知.实际上,团队忠实地编译所有源代码文件并部署生成的可执行文件,尽管显然有不再使用的程序.
不言而喻,没有正式的配置管理过程,并且源代码没有保存在版本控制系统中.由于应用程序在OpenVMS上运行,因此相应的基于Files-11的文件系统保留了旧版本的文件(包括源文件),这一直是不将应用程序源放入版本控制系统的借口(尽管使用的原因) VCS的扩展远远超出了以前版本的记录.
当然,有许多方法可以确定配置,但我想从第一个"小步骤"开始,即:确定构成应用程序的可执行文件集.此时我应该提到应用程序的可执行组件不仅限于OpenVMS映像,还包括DCL命令文件.我想要:
如果我们在延长的时间段(例如两个月)内对我们的生产系统进行此日志记录,我们可以很好地了解应用程序包含的内容.与用户咨询一起,我们将能够确认是否需要未被调用的可执行文件.
我想我已经知道如何做1以上,虽然我不确定具体,即使用SET/AUDIT
.第二部分,在这个阶段,我不知道该怎么做.
因此,这项工作的主要标准是,为了获得上述信息,现有系统的影响很小.由于配置周围的问号(以及完全缺乏自动化测试),改变任何事情都是一项令人头疼的事情.
使用操作系统级服务SET/AUDIT
可以让人们在不需要更改源代码和/或重新编译任何内容的情况下了解正在运行的内容.所以,我的问题是多方:
SET/AUDIT
为仅监视特定目录中的图像需要做什么?.COM
源文件的情况下记录命令文件调用?