**系統呼叫跟我學(4)
對linux不是太陌生的讀者都應該對shell有一定的了解,就是這個程式在我們登陸後自動執行,列印出乙個$符號,然後等待我們輸入命令。linux下最常用的shell應用程式是bash,絕大部分linux發行版預設安裝的都是它。下面我們也來親手編寫乙個shell程式,這個shell遠遠不如bash複雜,但也能滿足我們一般的使用,下面,我們就開始。
首先,給這個shell取乙個名字,不妨就叫做mini shell。
linux系統的命令分為內部命令和外部命令兩種,內部命令由shell程式實現,如cd、echo等,linux的內部命令數量有限,而且絕大部分都很少用到。而每乙個linux外部命令都是乙個單獨的應用程式,我們非常熟悉的ls、cp等絕大多數命令都是外部命令,這些命令都以可執行檔案的形式存在,絕大部分放在目錄/bin和/sbin中。這樣一來,我們程式設計的難度就可以大大下降了,我們只需要實現很有限的內部命令,對於其它的輸入,統統當作應用程式來執行即可。
為了簡單明瞭起見,mini shell只實現了2個內部命令:
1、cd 用於切換目錄,和我們熟悉的命令cd類似,除了沒有那麼多的附加功能。
2、quit 用於退出mini shell。
下面是程式清單:
/* mshell.c */
#include #include #include #include #include #include void do_cd(char *argv);
void execute_new(char *argv);
main()
else if(pid>0)
/* 父程序退出 */
exit(0);
/* 呼叫setsid */
setsid();
/* 切換當前目錄 */
chdir("/");
/* 設定檔案許可權掩碼 */
umask(0);
/* 關閉所有可能開啟的不需要的檔案 */
for(i=0;i編譯和執行的任務就交給讀者們自己完成。daemon程序不像其他程序一樣有很搶眼的執行結果,基本上它只是毫不聲張地做自己的事。你不可能看到任何東西,但可以用"ps -ajx"命令觀察一下你的daemon程序的狀態和一些引數。
#include int chdir(const char *path);
chdir的作用是改變當前工作目錄。程序的當前工作目錄一般是應用程式啟動時的目錄,一旦程序開始執行後,當前工作目錄就會保持不變,除非呼叫chdir。chdir只有1個字串引數,就是要轉去的路徑。例如:
chdir("/");
程序的當前路徑就會變為根目錄。
#include pid_t setsid(void);
乙個會話(session)開始於使用者登陸,終止於使用者退出,在此期間該使用者執行的所有程序都屬於這個會話,除非程序呼叫setsid系統呼叫。
系統呼叫setsid不帶任何引數,呼叫之後,呼叫程序就會成立乙個新的會話,並自任該會話的組長。
#include #include mode_t umask(mode_t mask);
系統呼叫umask可以設定乙個檔案許可權掩碼,使用者可以用它來遮蔽某些許可權,以防止誤操作導致給予某些使用者過高的許可權。
跟我學XSL 4 測試模式
xml技術的優勢之一就在於資料輸出的可選擇性,即選擇需要的資料輸出。前面我們所講到的選擇模式語句 xsl for each xsl value of 及 xsl if 與多條件判斷 xsl choose 及 xsl when 則迎合了這種需要,如果你對程式設計熟悉的話,會覺得它們似曾相識。xsl中的...
跟我學shiro realm之資源許可權(4)
編寫ini 檔案 在ini檔案中使用者 角色 許可權的配置規則是 使用者名稱 密碼,角色1,角色2.角色 許可權1,許可權2.首先根據使用者名稱找角色,再根據角色找許可權,角色是許可權集合。許可權字串的規則是 資源識別符號 操作 資源例項識別符號 意思是對哪個資源的哪個例項具有什麼操作,是資源 操作...
跟我學XSL XSL入門
跟我學xsl xsl入門 上期我們講到用css 層疊樣式表 來格式化xml文件,其效果並不很令人滿意。實際上css用來格式化html標記比較合適些,只是因為它簡單才在上例中採用。xml在更多的時候只是一種資料檔案,怎樣將它變為我們日常所看到的html格式那樣的檔案呢?如果我們將xml檔案比作結構化的...