通過(guò)C語(yǔ)言實(shí)現(xiàn)關(guān)機(jī),有兩種方式:
目前成都創(chuàng)新互聯(lián)已為1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、尼金平網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
1 通過(guò)system函數(shù),調(diào)用dos的關(guān)機(jī)命令。
通過(guò)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 通過(guò)調(diào)用windows提供的api函數(shù),來(lái)實(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;
}
標(biāo)準(zhǔn)C語(yǔ)言沒有關(guān)機(jī)的相關(guān)庫(kù)函數(shù),可以通過(guò)system函數(shù)執(zhí)行dos命令shutdown實(shí)現(xiàn),具體代碼如下,\x0d\x0a#include \x0d\x0aint main(int argc, char *argv[])\x0d\x0a{\x0d\x0achar str[10];//存儲(chǔ)退出指令\x0d\x0asystem("shutdown -s -t 100");//100秒后關(guān)機(jī)\x0d\x0awhile(1)\x0d\x0a{\x0d\x0aprintf("輸入exit,結(jié)束定時(shí)關(guān)機(jī)!\n"); \x0d\x0agets(str); //輸入存儲(chǔ)指令\x0d\x0aif(strcmp(str,"exit")==0) //滿足條件結(jié)束定時(shí)關(guān)機(jī)\x0d\x0a{ \x0d\x0asystem("shutdown -a");\x0d\x0aprintf("定時(shí)關(guān)機(jī)結(jié)束!\n"); \x0d\x0abreak; \x0d\x0a} \x0d\x0a} \x0d\x0areturn 0;\x0d\x0a}\x0d\x0a\x0d\x0ashutdown使用方式,shutdown [-t ] [-rkhncfF] time [message];\x0d\x0a其中,參數(shù):\x0d\x0a-t : 設(shè)定在t秒之后進(jìn)行關(guān)機(jī)程序\x0d\x0a-k : 并不會(huì)真的關(guān)機(jī),只是將警告訊息傳送給所有使用者\(yùn)x0d\x0a-r : 關(guān)機(jī)后重新開機(jī)\x0d\x0a-h : 關(guān)機(jī)后停機(jī)\x0d\x0a-n : 不采用正常程序來(lái)關(guān)機(jī),用強(qiáng)迫的方式殺掉所有執(zhí)行中的程序后自行關(guān)機(jī)\x0d\x0a-c : 取消目前已經(jīng)進(jìn)行中的關(guān)機(jī)動(dòng)作\x0d\x0a-f : 關(guān)機(jī)時(shí),不做 fcsk動(dòng)作(檢查 Linux 檔系統(tǒng))\x0d\x0a-F : 關(guān)機(jī)時(shí),強(qiáng)迫進(jìn)行 fsck 動(dòng)作\x0d\x0atime : 設(shè)定關(guān)機(jī)的時(shí)間\x0d\x0amessage : 傳送給所有使用者的警告訊息\x0d\x0a可以通過(guò)shutdown -a取消關(guān)機(jī)操作。
舉例如下:
//#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
int print()
{
printf(" ╪╪╪╪╪╪╧╧╧╧╧╧╧╧╪╪╪╪╪╪\n");
printf("╔═══╧╧ C語(yǔ)言 關(guān)機(jī)程序 ╧╧═══╗\n");
printf("║※1.實(shí)現(xiàn)10分鐘內(nèi)的定時(shí)關(guān)閉計(jì)算機(jī) ║\n");
printf("║※2.立即關(guān)閉計(jì)算機(jī) ║\n");
printf("║※3.注銷計(jì)算機(jī) ║\n");
printf("║※0.退出系統(tǒng) ║\n");
printf("╚═══════════════════╝\n");
return 0;
}
void main()
{
system("title C語(yǔ)言關(guān)機(jī)程序");//設(shè)置cmd窗口標(biāo)題
system("mode con cols=48 lines=25");//窗口寬度高度
system("color 0B");
system("date /T");
system("TIME /T");
char cmd[20]="shutdown -s -t ";
char t[5]="0";
print();
int c;
scanf("%d",c);
getchar();
switch(c)
{
case 1:printf("您想在多少秒后自動(dòng)關(guān)閉計(jì)算機(jī)?(0~600)\n");scanf("%s",t);system(strcat(cmd,t));break;
case 2:system("shutdown -p");break;
case 3:system("shutdown -l");break;
case 0:break;
default:printf("Error!\n");
}
system("pause");
exit(0);
}
可以通過(guò)C語(yǔ)言調(diào)用系統(tǒng)命令實(shí)現(xiàn)關(guān)機(jī)。
1、C語(yǔ)言可以通過(guò)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. 具體說(shuō)明如圖:
更多信息,可以命令行下輸入shutdown /?查看。
3、從命令說(shuō)明上可以得知,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。
C語(yǔ)言中實(shí)現(xiàn)關(guān)機(jī)的代碼如下
#include?stdlib.h
int?main()?
{
system("shutdown?-s?-f?-t?0");
return?0;?
}
system是標(biāo)準(zhǔn)庫(kù)的一個(gè)函數(shù),用來(lái)執(zhí)行一些外部命令。。
這里shutdown 其實(shí)是DOS命令,這里通過(guò)system調(diào)用它便可關(guān)機(jī),而不用那繁雜的 API 。
shutdown 還可實(shí)現(xiàn)定時(shí)關(guān)機(jī),比如 at 12:00 shutdown -s -t? 0? 表示在12:00 關(guān)機(jī)。
這個(gè)附上一個(gè)有交互型的關(guān)機(jī)小程序。
#include??stdlib.h#include??windows.h
int?main()
{?
int?iResult?=?::MessageBox(NULL,TEXT("確認(rèn)要關(guān)機(jī)?"),TEXT("關(guān)機(jī)"),MB_OKCANCEL|MB_ICONQUESTION?);?
if(1?==iResult?)?
{
system("shutdown?-s?-t?0");???
}
return?0;
}