Trending News
如何利用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 也是程式關掉就跑完了,我需要可以輸入後才執行該程式的寫法,拜託各位專家大大了。
您好~我想請問一下,如果要可以輸入calc則可執行存放於同一資料夾的calc.exe要如何修改?,還有可以麻煩您加一下程式註解嗎?,因為我還是初學,太深的語法不太懂。
不好意思~後來才發現不用改程式,問題已解決,但是可以麻煩您跟我解釋一下程式嗎?,我想知道這程式的運作方式與原理,感恩喔
3 Answers
- Jacob LeeLv 71 decade agoFavorite 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...
那裡有一點註解。
哪裡不懂,請在意見中指出,並寄信給我。
我針對那裡解釋。