系統呼叫跟我學 4

2021-06-25 19:48:31 字數 1695 閱讀 7604

**系統呼叫跟我學(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檔案比作結構化的...