C語言system函數

Windows函數

windows操作系統下system ()函數詳解(主要是在C語言中的應用) 函數名:system

功 能: 發出一個DOS命令

用 法: int system(char *command);

system函數已經被收錄在標準c庫中,可以直接調用

程序例:

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
printf("About to spawn and run a DOScommand\n");
system("dir");
return 0;
}


又如:system("pause")可以實現凍結屏幕,便於觀察程序的執行結果;system("CLS")可以實現清屏操作。而調用color函數可以改變控制檯的前景色和背景,具體參數在下面說明。

例如,用 system("color 0A");其中color後面的0是背景色代號,A是前景色代號。各顏色代碼如下:

0=黑色 1=藍色 2=綠色 3=湖藍色 4=紅色 5=紫色 6=黃色 7=白色 8=灰色 9=淡藍色 A=淡綠色 B=淡淺綠色 C=淡紅色 D=淡紫色 E=淡黃色 F=亮白色

ASSOC    顯示或修改文件擴展名關聯。

AT       計劃在計算機上運行的命令和程序。

ATTRIB   顯示或更改文件屬性。

BREAK    設置或清除擴展式 CTRL+C 檢查。

CACLS    顯示或修改文件的訪問控制列表(ACLs)

CALL     從另一個批處理程序調用這一個。

CD       顯示當前目錄的名稱或將其更改。

CHCP     顯示或設置活動代碼頁數。

CHDIR    顯示當前目錄的名稱或將其更改。

CHKDSK   檢查磁盤並顯示狀態報告。

CHKNTFS 顯示或修改啓動時間磁盤檢查。

CLS      清除屏幕。

CMD      打開另一個 Windows 命令解釋程序窗口。

COLOR    設置默認控制檯前景和背景顏色。

COMP     比較兩個或兩套文件的內容。

COMPACT 顯示或更改 NTFS 分區上文件的壓縮。

CONVERT  FAT 卷轉換成 NTFS。您不能轉換當前驅動器。

COPY     將至少一個文件複製到另一個位置。

DATE     顯示或設置日期。

DEL      刪除至少一個文件。

DIR      顯示一個目錄中的文件和子目錄。

DISKCOMP 比較兩個軟盤的內容。

DISKCOPY 將一個軟盤的內容複製到另一個軟盤。

DOSKEY   編輯命令行、調用 Windows 命令並創建宏。

ECHO     顯示消息,或將命令回顯打開或關上。

ENDLOCAL 結束批文件中環境更改的本地化。

ERASE    刪除至少一個文件。

EXIT     退出 CMD.EXE 程序(命令解釋程序)

FC       比較兩個或兩套文件,並顯示不同處。

FIND     在文件中搜索文字字符串。

FINDSTR 在文件中搜索字符串。

FOR      爲一套文件中的每個文件運行一個指定的命令

FORMAT   格式化磁盤,以便跟 Windows 使用。

FTYPE    顯示或修改用於文件擴展名關聯的文件類型。

GOTO     將 Windows 命令解釋程序指向批處理程序中某個標明的行。

GRAFTABL 啓用 Windows 來以圖像模式顯示擴展字符集。

HELP     提供 Windows 命令的幫助信息。

IF       執行批處理程序中的條件性處理。

LABEL    創建、更改或刪除磁盤的卷標。

MD       創建目錄。

MKDIR    創建目錄。

MODE     配置系統設備。

MORE     一次顯示一個結果屏幕。

MOVE     將文件從一個目錄移到另一個目錄。

PATH     顯示或設置可執行文件的搜索路徑。

PAUSE    暫停批文件的處理並顯示消息。

POPD     還原 PUSHD 保存的當前目錄的上一個值。

PRINT    打印文本文件。

PROMPT   更改 Windows 命令提示符。

PUSHD    保存當前目錄,然後對其進行更改。

RD       刪除目錄。

RECOVER 從有問題的磁盤恢復可讀信息。

REM      記錄批文件或 CONFIG.SYS 中的註釋。

REN      重命名文件。

RENAME   重命名文件。

REPLACE 替換文件。

RMDIR    刪除目錄。

SET      顯示、設置或刪除 Windows 環境變量。

SETLOCAL 開始批文件中環境更改的本地化。

SHIFT    更換批文件中可替換參數的位置。

SORT     對輸入進行分類。

START    啓動另一個窗口來運行指定的程序或命令。

SUBST    將路徑跟一個驅動器號關聯。

TIME     顯示或設置系統時間。

TITLE    設置 CMD.EXE 會話的窗口標題。

TREE     以圖形模式顯示驅動器或路徑的目錄結構。

TYPE     顯示文本文件的內容。

VER      顯示 Windows 版本。

VERIFY   告訴 Windows 是否驗證文件是否已正確寫入磁盤。

VOL      顯示磁盤卷標和序列號。

XCOPY    複製文件和目錄樹。

(注意:MicrosoftVisual C++6.0支持system

舉例

看了下面實例,相信你會對學到更多systemC程序設計中的應用。

例一:

C語言調用DOS命令實現定時關機

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int print()
{
printf(" ╪╪╪╪╪╪╧╧╧╧╧╧╧╧╪╪╪╪╪╪\n");
printf("╔═══╧╧C語言關機程序 ╧╧═══╗\n");
printf("║※1.實現10分鐘內的定時關閉計算機 ║\n");
printf("║※2.立即關閉計算機  ║\n");
printf("║※3.註銷計算機  ║\n");
printf("║※0.退出系統  ║\n");
printf("╚═══════════════════╝\n");
return 0;
}
void main()
{
system("title C語言關機程序");//設置cmd窗口標題
system("mode con cols=48lines=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("您想在多少秒後自動關閉計算機?(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);
}


例二:

C語言刪除文件,例如文件的位置是d:\123.txt

system()函數執行windows命令。

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
system("del d:\123.txt");
return 0;
}


Linux/Unix函數

函數詳解

(執行shell 命令)

相關函數

forkexecvewaitpidpopen

表頭文件

#include<stdlib.h>

定義函數

int system(const char * string);

函數說明

system()會調用fork()產生子進程,由子進程來調用/bin/sh-cstring來執行參數string字符串所代表的命令,此命令執行完後隨即返回原調用的進程。在調用system()期間SIGCHLD信號會被暫時擱置,SIGINTSIGQUIT信號則會被忽略。

返回值

如果fork()失敗 返回-1:出現錯誤

如果exec()失敗,表示不能執行Shell,返回值相當於Shell執行了exit127

如果執行成功則返回子Shell的終止狀態

如果system()在調用/bin/sh時失敗則返回127,其他失敗原因返回-1。若參數string爲空指針(NULL),則返回非零值>;。如果system()調用成功則最後會返回執行shell命令後的返回值,但是此返回值也有可能爲 system()調用/bin/sh失敗所返回的127,因此最好能再檢查errno來確認執行成功。

附加說明

在編寫具有SUID/SGID權限的程序時請勿使用system(),system()會繼承環境變量,通過環境變量可能會造成系統安全的問題。

範例

#include<stdlib.h>
main()
{
system(“ls -al/etc/passwd /etc/shadow”);
}


執行結果:

-rw-r--r-- 1 root root 705 Sep 3 13 :52/etc/passwd

-r--------- 1 root root 572 Sep 2 15 :34/etc/shado

2

char tmp[];
sprintf(tmp,"/bin/mount -t vfat %s/mnt/usb",dev);
system(tmp);


其中dev/dev/sda1.

exec的區別

1system()和exec()都可以執行進程外的命令,system是在原進程上開闢了一個新的進程,但是exec是用新進程(命令)覆蓋了原有的進程

2system()和exec()都有能產生返回值,system的返回值並不影響原有進程,但是exec的返回值影響了原進程

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章