【问题标题】:how to run a c program with reading command line parameters in openvms?如何在openvms中读取命令行参数来运行c程序?
【发布时间】:2016-02-21 06:11:56
【问题描述】:

我构建了一个简单的程序尝试打印命令行参数。

代码如下,我构建了一个可执行文件(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);
}

我尝试运行 TEST.EXE 并打印参数但失败。

命令RUN TEST.EXE test1 test2的结果:

%DCL-W-MAXPARM, too many parameters - reenter command with fewer parameters

如何打印“test1”和“test2”?

【问题讨论】:

  • 这个简单的问题让VMS看起来像一只恐龙。难怪其他操作系统接管了。 VMS 有很好的文件系统好东西,但它从来不打算交互式地运行程序。

标签: c openvms vms


【解决方案1】:

RUN 命令不支持任何命令行参数。定义一个外部命令并使用它。来自 David Mathog 的beginner FAQ

如何启动程序?

  • 方法二:使用RUN命令:

    $ run program_nameNo command line arguments allowed

  • 方法3:为其定义一个外部命令,然后运行它。在里面 下列的 一个逻辑名称等价于 程序的位置。

    $ new_command :== $where:program_name $ new_command [command line arguments]

【讨论】:

    【解决方案2】:

    按照“a3f”定义外部命令是“正确”的方法,尽管有些繁琐且需要两步。

    您可能还想尝试 MCR 的“技巧”。 MCR 是 40 多年前 PDPD-11 操作系统 RSX 的 Monitor Command Routine 的缩写。

    现在 MCR 默认在 SYS$SYSTEM 中查找程序,因此您必须指定当前位置:

    $ MCR dev:[dir]TEST this is a test.
    

    还有一个使用 DCL$PATH 的 1-1/2 步方法。 这主要类似于 Unix 和 Windows 路径,如果输入未知命令,则提供查找 DCL 脚本或程序的位置。

    例如

    $ DEFINE DCL$PATH SYS$DISK:[],SYS$LOGIN:,SYS$SYSTEM:
    

    现在只需输入:TEST this.

    海因

    【讨论】:

      【解决方案3】:

      另外,如果你需要保留参数的大小写,你必须引用这些参数或输入

      $ SET PROCESS/PARSE_STYLE=EXTENDED
      

      在您的流程的生命周期中一次,并且

      $ DEFINE/USER DECC$ARGV_PARSE_STYLE TRUE
      

      在使用特定的外部命令或使用自动外部命令 (DCL$PATH) 运行程序之前。否则,所有未加引号的参数都将转换为小写字符。

      PS:VMS有命令语言,就是你必须输入命令才能运行程序。默认情况下,文件名不是命令。通过定义 DCL$PATH,您可以更改此默认行为。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-06
        • 2011-04-21
        • 2015-07-20
        • 2023-03-24
        • 1970-01-01
        • 2014-06-23
        • 1970-01-01
        • 2019-02-07
        相关资源
        最近更新 更多