與shell命令相關函式呼叫

2021-08-22 02:33:12 字數 2147 閱讀 4082

linuxc

#includeint dup(int oldfd);

int dup2(int oldfd,int newfd)

dup用來複製oldfd所指的檔案描述符。當複製成功時返回最小的尚未被使用的檔案描述符。若有錯誤則返回-1,錯誤**存入errno中。返回的新檔案描述符和引數oldfd指向同乙個檔案,共享所有的鎖定,讀寫指標,和各項許可權或標誌位。  (類似於鏈結) 

dup2可以用引數newfd指定新檔案描述符的數值。若newfd已經被程式使用,系統就會將其關閉以釋放該檔案描述符;若newfd與oldfd相等,dup2將返回newfd,而不關閉他。dup2呼叫成功返回新的檔案描述符,出錯則返回-1。     (重定向)

標準輸入(stdin),標準輸出(stdout),標準出錯資訊(stderr)的檔案號分別為0,1,2。 

例如,使用了dup(newfd,1)後,控制台輸出的資訊會全部被輸出到檔案描述符newfd所對應的檔案上,而控制台不再輸出資訊,因為控制台所對應的檔案描述符已經被關閉了。

my_shell 實現重定向時父程序等待子程序中,邏輯關係:

printf( "\033[1;31;40m 輸出紅色字元 \033[0m" )

\033[顯示方式;前景色;背景色m

檔案描述符是乙個比較重要的概念,它和輸入和輸出密切相關

linux標準檔案描述符: 

0 stdin 標準輸入 

1 stdout 標準輸出 

2 stderr 標準錯誤輸出 

linux系統將所有裝置都當作檔案來處理,而linux用檔案描述符來標識每個檔案物件。其實我們可以想象我們電腦的顯示器和鍵盤在linux系統中都被看作是檔案,而它們都有相應的檔案描述符與之對應。

其實我們與計算機之間的互動是我可以輸入一些指令之後它給我一些輸出。那麼我們可以把上面**中的檔案描述符0理解為我和計算機互動時的輸入,而這個輸入預設是指向鍵盤的; 檔案描述符1理解為我和計算機互動時的輸出,而這個輸出預設是指向顯示器的; 檔案描述符2理解為我和計算機互動時,計算機出現錯誤時的輸出,而這個輸出預設是和檔案描述符1指向乙個位置

ps:open函式如果成功開啟會返回所開啟檔案的檔案描述符。

系統檔案/etc/passwd包含乙個使用者帳號資料庫。它由行組成,每行對應乙個使用者,包括:

使用者名稱、加密口令、使用者識別符號(uid)、組識別符號(gid)、全名、主目錄和預設shell。

程式設計介面的資料結構:

strcut passwd

#include #include struct passwd *getpwuid(uid_t uid);

struct passwd *getpwnam(const char *name);

這兩個函式都返回乙個指標,指向passwd結構。出錯時,返回null,並設定errno。

#include

int uname(struct utsname *name);

成員 描述 

char sysname 作業系統名 

char nodename 主機名 

char release 系統發行級別 

char version 系統版本號 

char machine 硬體型別

```#include 

int gethostname(char *name, size_t namelen);

在deepin下可以用這個命令(ubuntu和deepin一樣)

sudo apt-get install libreadline6-dev
原型

#include #include ①char *readline (const char *prompt);//返回值就是讀取的字串

②void add_history(const char *string);//用來返回歷史

③typedef char *rl_compentry_func_t(const char *text, int state);

④char **rl_completion_matches(const char *text, rl_compentry_func_t *entry_func);

函式呼叫約定與相關指令

函式呼叫約定與相關指令 函式呼叫約定描述了函式傳遞引數方式和棧協同工作的技術細節。不同的作業系統 不同的語言 不同的編譯器在實現函式呼叫時的原理雖然基本相同,但具體的呼叫約定還是有差別的。這包括引數傳遞方式,引數入棧順序是從右向左還是從左向右,函式返回時恢復堆疊平衡的操作在子函式中進行還是在母函式中...

awk呼叫shell命令

awk可以用getline或system來呼叫shell的命令 1 getline 通過在awk內使用管道,可以把shell命令的輸出傳送給awk awk begin sun mar 8 22 21 52 2009 順便說一下getline的其他用法.getline除了可以通過管道從shell命令裡...

python呼叫shell命令

在python程式中呼叫shell命令 此函式會啟動子程序,在子程序中執行command,並返回command命令執行完畢後的退出狀態,如果command有執行內容,會在標準輸出顯示。這實際上是使用c標準庫函式system 實現的。缺點 這個函式在執行command命令時需要重新開啟乙個終端,並且無...