如何利用VC寫出類似windows的cmd.exe的程~很急

想請問如何利用VC寫出類似windows的cmd.exe的程式

需要動作如下:

輸入calc可以執行小算盤

輸入help可執行windows 內建的help

輸入hostname可顯示出電腦名稱

輸入write可執行wordpad

輸入exit會跳離這個程式

程式要求:撰寫一shell程式,該shell可以執行calc, notepad, hostname, help, bye等指令。其中,calc為Windows「小算盤」程式,notepad為Windows「記事本」程式,hostname可列出你正在使用的這台機器名稱,help列出一般DOS指令的使用方式,bye則結束此shell程式。另,在命令列若鍵入calc &,則會將「小算盤」以背景程式執行。

calc.exe, notepad.exe, hostname.exe, help.exe係Windows提供的程式。同學撰寫自己的shell之前,可將這四個程式由c:\windows\system32\ 複製到您shell所在的工作目錄(檔案夾),以方便直接呼叫利用。

老師上課有提到可利用spawnl語法,但是不能利用輸入指令來執行,而是瞬間就執行完了,就算利用_P_WAIT 也是程式關掉就跑完了,我需要可以輸入後才執行該程式的寫法,拜託各位專家大大了。

Update:

您好~我想請問一下,如果要可以輸入calc則可執行存放於同一資料夾的calc.exe要如何修改?,還有可以麻煩您加一下程式註解嗎?,因為我還是初學,太深的語法不太懂。

Update 2:

不好意思~後來才發現不用改程式,問題已解決,但是可以麻煩您跟我解釋一下程式嗎?,我想知道這程式的運作方式與原理,感恩喔

3 Answers

Rating
  • 1 decade ago
    Favorite Answer

    #include <stdio.h>

    #include <stdlib.h>

    #include <string.h>

    #include <process.h>

    #define SIZ 512

    int main(void)

    { int l;

    intptr_t err;

    char buf[SIZ];

    do

    { printf("\nplease enter a command (exit to quit): ");

    l = strlen(fgets(buf, SIZ, stdin));

    buf[--l] = '\0'; // cut the tailing \r

    if (!strcmp(buf, "exit")) break;

    err = _spawnl(_P_WAIT, buf, buf, NULL);

    if (err)

    { fprintf(stderr, "There is error in execution (code: %d)!\a\n"

    "Please see the error message above!\n", err);

    }

    _sleep(err ? 5000 : 2000);

    } while (1);

    system("pause");

    return 0;

    }

    其實這題你改成 P_NOWAIT 比較好玩!

    哪有問題請再問!^_^

    2008-04-06 21:29:58 補充:

    我今天忙,過兩天再註解。

    學程式,我白痴了近一年!

    學C,我也白痴了約半年!

    秘訣沒別的,就是

     一直寫、

     和朋友比賽、

     看高手寫的程式、

     看書學理論。

    加油,你也可以。 ^_^

    2008-04-06 23:41:15 補充:

    喔!我竟沒看到那部份!

    我再來改,Sorry。

    2008-04-09 12:42:37 補充:

    新版有處理 & 和 背景執行的程式在

    http://www.phpbbserver.com/graphicsparalle/viewtop...

    那裡有一點註解。

    哪裡不懂,請在意見中指出,並寄信給我。

    我針對那裡解釋。

  • SiYu
    Lv 5
    1 decade ago

    不是要可以在背景跑嗎??

    好像沒做到這樣的功能阿.

  • 1 decade ago

    謝謝您喔~我的mail是g-tim@yahoo.com.tw

Still have questions? Get your answers by asking now.