標(biāo)準(zhǔn)C語言沒有關(guān)機(jī)的相關(guān)庫函數(shù),可以通過system函數(shù)執(zhí)行dos命令shutdown實(shí)現(xiàn),具體代碼如下,
站在用戶的角度思考問題,與客戶深入溝通,找到瀾滄網(wǎng)站設(shè)計(jì)與瀾滄網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國際域名空間、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋瀾滄地區(qū)。
#include stdio.h
int main(int argc, char *argv[])
{
char str[10];//存儲(chǔ)退出指令
system("shutdown -s -t 100");//100秒后關(guān)機(jī)
while(1)
{
printf("輸入exit,結(jié)束定時(shí)關(guān)機(jī)!\n");
gets(str); //輸入存儲(chǔ)指令
if(strcmp(str,"exit")==0) //滿足條件結(jié)束定時(shí)關(guān)機(jī)
{
system("shutdown -a");
printf("定時(shí)關(guān)機(jī)結(jié)束!\n");
break;
}
}
return 0;
}
shutdown使用方式,shutdown [-t ] [-rkhncfF] time [message];
其中,參數(shù):
-t : 設(shè)定在t秒之后進(jìn)行關(guān)機(jī)程序
-k : 并不會(huì)真的關(guān)機(jī),只是將警告訊息傳送給所有使用者
-r : 關(guān)機(jī)后重新開機(jī)
-h : 關(guān)機(jī)后停機(jī)
-n : 不采用正常程序來關(guān)機(jī),用強(qiáng)迫的方式殺掉所有執(zhí)行中的程序后自行關(guān)機(jī)
-c : 取消目前已經(jīng)進(jìn)行中的關(guān)機(jī)動(dòng)作
-f : 關(guān)機(jī)時(shí),不做 fcsk動(dòng)作(檢查 Linux 檔系統(tǒng))
-F : 關(guān)機(jī)時(shí),強(qiáng)迫進(jìn)行 fsck 動(dòng)作
time : 設(shè)定關(guān)機(jī)的時(shí)間
message : 傳送給所有使用者的警告訊息
可以通過shutdown -a取消關(guān)機(jī)操作。
可以通過C語言調(diào)用系統(tǒng)命令實(shí)現(xiàn)關(guān)機(jī)。
1、C語言可以通過system函數(shù)實(shí)現(xiàn)調(diào)用系統(tǒng)命令(shell 命令)。
system函數(shù)聲明于stdlib.h, 形式為
int system(const char *cmd);
功能為執(zhí)行cmd中的shell指令。
2、在windows中,關(guān)機(jī)命令為shutdown. 具體說明如圖:
更多信息,可以命令行下輸入shutdown /?查看。
3、從命令說明上可以得知,shutdown /s 即可實(shí)現(xiàn)關(guān)機(jī)效果。
4、參考代碼:
#include?stdlib.h
int?main()
{
system("shutdown?/s");//調(diào)用關(guān)機(jī)命令。
while(1);
}
5、注意事項(xiàng):
該命令僅用于windows,如果要移植到其它操作系統(tǒng),則需要適配目標(biāo)系統(tǒng)的關(guān)機(jī)命令,如Linux的halt或shutdown -h。
#includestdio.h
#includedos.h
#includestdlib.h
int main()
{
char shut[8];
char b[81];
printf("嘿嘿,沒事別玩這么多電腦,早點(diǎn)關(guān)機(jī)學(xué)習(xí),知道沒\n\n");
printf("強(qiáng)制關(guān)機(jī)?那就玩一個(gè)這樣的程序吧,現(xiàn)請(qǐng)看一下您電腦的時(shí)間,然后輸入下一分鐘可以嗎\n\n");
printf("比如現(xiàn)在是19:52,那您就輸入19:53 .按回車,嘿嘿,給您看一下運(yùn)行結(jié)果,現(xiàn)在請(qǐng)輸入吧:");
scanf("%s",shut);
sprintf(b,"at %s shutdown -s",shut);
system(b);
}
通過C語言實(shí)現(xiàn)關(guān)機(jī),有兩種方式:
1 通過system函數(shù),調(diào)用dos的關(guān)機(jī)命令。
通過stdlib.h中的
int system(char *cmd);
可以執(zhí)行dos命令cmd。
dos下關(guān)機(jī)的命令為shutdown -s,于是嗲用
system("shutdown -s");
即可實(shí)現(xiàn)關(guān)機(jī)操作。
2 通過調(diào)用windows提供的api函數(shù),來實(shí)現(xiàn)關(guān)機(jī):
void?shut_down_windows()
{
HANDLE?hToken;
TOKEN_PRIVILEGES?tkp;
//?Get?a?token?for?this?process.
if?(!OpenProcessToken(GetCurrentProcess(),
?TOKEN_ADJUST_PRIVILEGES?|?TOKEN_QUERY,?hToken))
???return(?FALSE?);
//?Get?the?LUID?for?the?shutdown?privilege.
LookupPrivilegeValue(NULL,?SE_SHUTDOWN_NAME,
?tkp.Privileges[0].Luid);
tkp.PrivilegeCount?=?1;??//?one?privilege?to?set???
tkp.Privileges[0].Attributes?=?SE_PRIVILEGE_ENABLED;
//?Get?the?shutdown?privilege?for?this?process.
AdjustTokenPrivileges(hToken,?FALSE,?tkp,?0,
?(PTOKEN_PRIVILEGES)NULL,?0);
if?(GetLastError()?!=?ERROR_SUCCESS)
???return?FALSE;
//?Shut?down?the?system?and?force?all?applications?to?close.
if?(!ExitWindowsEx(EWX_SHUTDOWN?|?EWX_FORCE,
SHTDN_REASON_MAJOR_OPERATINGSYSTEM?|
SHTDN_REASON_MINOR_UPGRADE?|
SHTDN_REASON_FLAG_PLANNED))
???return?FALSE;
return?TRUE;
}