如何在openvms中读取命令行参数来运行c程序?

时间:2016-02-21 06:11:57

标签: c openvms vms

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

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

3 个答案:

答案 0 :(得分:7)

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

  

如何启动程序?

     
      
  • 方法2:使用RUN命令:

         

    $ run program_name No command line arguments allowed

  •   
  • 方法3:为其定义外来命令,然后运行它。在里面   以下          示例其中是一个等同于的逻辑名称          该计划的位置。

         

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

  •   

答案 1 :(得分:3)

根据&#39; a3f&#39;定义外国命令。是正确的&#39;这样做的方式虽然有点乏味和两步。

您可能还想尝试MCR&#39;技巧&#39;。 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.

海恩

答案 2 :(得分:2)

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

$ SET PROCESS/PARSE_STYLE=EXTENDED

在您的流程生命周期中

$ DEFINE/USER DECC$ARGV_PARSE_STYLE TRUE

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

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