1、命令就是程序我想絕大多數(shù)看這篇文章的讀者基本上都用過Windows操作系統(tǒng)下的命令提示符。
比起圖形化界面的操作,如果熟悉了Windows的命令提示符,你將會更快地操作這個操作系統(tǒng)。Windows圖形化界面如圖1所示。
圖1 Windows圖形化界面
不過,在Windows底下,大部分操作者還是習慣于圖形化界面的操作,因為作為一個商用化個人電腦操作系統(tǒng),Windows的圖形化界面做的非常流利,功能非常齊全。而如果你是一名服務器運維人員,你的服務器操作系統(tǒng)是Linux,而且Linux主機位于云端,那么你在運維的時候大概率會通過ssh工具遠程登陸,展開日常的運維工作。此時,這種Linux下的終端命令操作,將會是你日常的操作,如圖2所示。
圖2 Linux下的終端界面
在操作Linux終端時,我們會在終端里面輸入常用的命令,在Linux操作系統(tǒng)“一切皆文件”的設計哲學下,你日常輸入的這些命令,其實都是一個個“小程序”。然而,幾乎所有的操作系統(tǒng)都一樣,你想要操作一個命令,這個命令對應的可執(zhí)行文件必須位于操作系統(tǒng)的環(huán)境變量中,在Linux操作系統(tǒng)下,這個環(huán)節(jié)變量的名稱叫做“PATH”,我們可以使用”echo $PATH”命令將環(huán)境變量打印出了,如圖3所示。
圖3 Linux下的環(huán)境變量
通過環(huán)境變量的打印,我們可以清楚的看到此Linux操作系統(tǒng)的環(huán)境變量路徑,只要可執(zhí)行文件或者鏈接(軟連接)文件位于這些文件目錄下,那么我們直接在終端里面輸入對應的應用程序名稱即可運行?,F(xiàn)在,我們使用“cd /bin”命令打開根目錄下的“bin”文件夾,我們可以發(fā)現(xiàn)很多平時常用的命令,如“cp”,“chmod”等,如圖4所示。
圖4 /bin文件夾下的可執(zhí)行文件
2Linux下命令執(zhí)行的原理上述內(nèi)容,我們大致了解了Linux下操作命令終端運行可執(zhí)行文件的原理,這些命令說到底都是應用程序。但是大家是否想過,這些命令在運行時后面可以跟上命令選項,如“ls -l”可以列出當前文件夾下所有文件的詳細信息,“ls -s”可以列出所有文件的大小。那么命令后面的參數(shù)是如何傳進命令的應用程序里面的呢?如圖5所示。
圖5 ls命令不同參數(shù)下的輸出
3C語言main函數(shù)的入口這些Linux命令程序大多都是采用C語言開發(fā)而成的,我們平時都知道,C語言整個程序的唯一入口就是“main”函數(shù),一般我們在做一些簡單程序的時候都是用“int main(void)”的形式來定義主函數(shù),而Linux下,一個C語言“main”函數(shù)的標準原型應該是“int main(int argc, char *argv[], char *env[] );”,其中的三個參數(shù)分別是:int argc:傳入?yún)?shù)的數(shù)量;char *argv[]:傳入的參數(shù)列表;char *env[]:環(huán)境表地址。在ANSI C中,規(guī)定main函數(shù)只有兩個參數(shù),argc和argv,而且第三個參數(shù)與全局變量environ相比也沒有帶來更多益處,所以POSIX.1也規(guī)定應使用environ而不使用第三個參數(shù)。通常用getenv和putenv函數(shù)來存取特定的環(huán)境變量,而不是用environ變量。所以我們見到的main函數(shù)的原型多是下面這種 形式:“int main ( int argc, char* argv[]);”。比如,我們假設在Linux下有一個“小程序”x,在我們使用x命令的時候,后面會有可變的參數(shù)a,b,c。一般我們使用這個x命令的時候,它的形式為“x ”,也就是說,x后面可以跟0個,1個,2個,3個參數(shù),那當這個命令執(zhí)行的時候,傳入x的main函數(shù)時,“agrc”表示參數(shù)個數(shù),如當用戶使用“./x a b”運行這個程序時,“agrc”為3,而這時候,*agrv[]這變成了長度為3的字符串數(shù)組,其中agrv[0]=”./x”,agrv[1]=”a”, agrv[2]=”b”。按照這個思路,我們可以寫出如圖6所示的代碼。
圖6 x命令的實現(xiàn)
最后,我們只需要將x可執(zhí)行文件放到環(huán)境變量路徑中去,就可以在終端的任何地方運行這個x命令了。由于x名稱太過簡單,我們首先先將x改名成“xccmd”,再將其移入“/usr/sbin”文件夾中。接著,我們退到根目錄底下來運行命令“xccmd a b c d e f”。如圖7所示。
圖7 將編譯結果添加到環(huán)境變量
以上就是Linux操作系統(tǒng)下添加自定義程序的方法,Windows下也適用,如果想實現(xiàn)具體的功能,只需要在代碼里面實現(xiàn)即可。
附 程序源碼
#include
int main(int argc, char* argv[])
{
int i;
printf("argc:%dn", argc);
for(i=0;i
{
printf("argv[%d]:%sn", i, argv[i]);
}
return 0;
}