C程序与DOS的命令行接口

Author: 明炜 Date: 1995-06-23

        有很多可执行文件都可以接受DOS的命令行参数,如DOS的外部命令FORMAT就可以接收/S,/V等参数,并根据参数的不同而执行不同的操作。用C语言编成的程序也可以具有这种能力。你只要在main 函数的形参说明中说明了argc和argv这两个参数,就可以在程序中通过它们来使用在运行程序时DOS命令行所输入的量。
        另一方面,一个程序执行完以后还可以返回一个非负小数给DOS。如MS_DOS 6.2版本的FORMAT在正常格式化后会返回。在用户按CTRL+C中止格式后就会返回3,在出现严重错误下返回4等等。用户一般并不使用这个返回值,但有时也可能会用到它。DOS中的IF语句可以检测返回值并根据其大小做出不同反应,如果让C语言程序的main函数返回一个整数值,这个值就将被传给DOS,下面我们举一个例子,来看一看C语言程序与DOS的这种信息传递。
        C语言源程序文件ASK.C如下:
        ASK.C
        unsigned int  main(int argc,char *argv[])
        {unsigned int i;
        i=0;
        printf("what do you want to do?\n");
        while(argc-->1)
        printf("%d\t%s\n",i++,*++argv);
        scanf("%d",&i);
        return i;
        }
        这个程序于DOS命令行接受参数,它的While循环将各参数编号并打印出来,然后从键盘接收一个整数,并将此整数值作为返回值。这个程序本身并没做太多实际的工作,把它编译,链接,生成ASK.EXE的文件,备用。
        下面是调用ASK.EXE的DOS批处理文件RUN S.BAT
        RUNS.BAT
        ASK windows domm2 exit
        if errorlevel=2 goto exit
        if errorlevel=1 goto doom2
        if errorlevel=0 goto win
        :win
        c:
        cd c:\windows
        win
        goto exit
        :doom2
        d:
        cd d:\game\doom2
        doom2
        goto exit
        :exit
        c:
        cd\
        批处理的第一句调用ASK.EXE,并传给它三个参数。此时,屏幕上将显示:
        what do you want to do?
        0        windows
        1        doom2
        2        exit
        并将你输入的整数解为返回值传给DOS。随后的三条IF语句根据返回值的不同分别去执行不同的DOS命令。注意,这里对返回值进行判定的次序应该是由大到小,因为IF语句是在返回值大于等于等号后的值时,执行它后面的goto语句。整个批处理程序的作用就是显示三个选项,并根据你的选择,执行不同的程序。
        上面的程序仅仅是一个例子,有兴趣的学员可以参照其原理,编出满足自己需要的程序来。