2015-10-14 59 views
0

這是作業,你可以告訴。這將在C中實現。製作我自己的外殼

首先,我創建了一些打印殼牌 e.x的函數。

printf("%[email protected]:~/%s ", getlogin(), get_working_directory()); 

之後,我繼續用'|'標記輸入行,作爲一個分隔符,所以我得到將在後面管道的命令。

char* instr; 
instr = strtok(line, "|"); 
while (instr != NULL) { 
    insert_arguments_list(instr); //This is a singly-linked list that holds the arguments. 
    instr = strtok(NULL, "|"); 
} 

所以,現在,我要創建一個char * const的數組這是我做的事情之一不知道該怎麼辦,因爲所有的變量都必須事先聲明,因爲它是常量,不??

你能提供一些關於如何從現在開始的提示嗎?

+2

你需要什麼數組?什麼是問題? –

+0

不,你不需要將變量聲明爲const,所有exec()系列都會自行強制轉換const。只需專注於在分隔符之間使用需要的命令集來獲取char ** [],然後將char * []傳遞給execvp()。在一個循環中。 – 2015-10-14 12:16:20

回答

1

你爲什麼要使用execv? execl做同樣的事情,並期望一個const char *參數數組。

int execl(const char *path, const char *arg, ...);

否則你是對的,你不能將地址分配給在運行時char * const的。這就是爲什麼execl在這裏 - 這是一個方便的功能,爲此目的。

+0

感謝您的回覆,這回答了我的第一個問題。我的另一個擔心是,我有一個示例輸入,例如:mkdir new_folder,我將它拆分爲「mkdir」和「new_folder」,並將它們存儲在一個數組中,然後解析該數組? – Jack

+0

是的,你的想法對我來說似乎是對的。您的輸入可能只是mkdir文件夾,無論是mkdir folder1 folder2還是ls文件夾| grep regexp && mkdir文件夾等。它可能變得相當複雜。解決方案取決於你的shell應該實現什麼功能。您將解析字符串並通過|分割命令或&&或其他分隔符,那些命令將包含命令的名稱和參數列表,分隔白色字符或空格。 – user3032524