2015-12-05 102 views
1

我實現了一個簡單的shell。我想使用輸入/輸出重定向。我寫了一段代碼,但我的代碼不起作用。這裏是我的代碼:在shell中輸入輸出重定向c

+0

什麼不行? – Downvoter

+0

首先,* args [i] =='>'--->這不起作用。我寫了一個printf來嘗試if語句是否正確@cad – esrtr

+0

你能提供完整的代碼嗎? –

回答

-2

我覺得自己不需要星號*您若條件。 您想將args [x]的值與符號'>'進行比較。

如果它不是這樣,你可以多寫一點關於發生錯誤?

+0

如果我不添加*,這將是一個錯誤終端:「警告:比較之間的指針和整數」 – esrtr

+0

@Dominik'args [i]'將是一個地址...你需要去引用它獲得價值...因此你需要那 –

+0

那是怎麼回事?我們不知道這段代碼中的數組參數是什麼類型的,但通常你可以引用一個沒有*的數組元素的值。 – Dominik

1

(習慣寫在你的printf語句%s\n

當你的編譯程序被稱爲myshell,你會看到>當它被賦予作爲參數:

./myshell arg1 arg2 ">" arg4 

當你不牛逼報價>,外殼會照顧重定向:

# Not what you want: 
./myshell arg1 arg2 > arg4 

會導致myshell被稱爲帶參數ARG1和arg2,myshell的結果將被重定向到arg4。

+0

你能解釋一下,我怎樣才能解決這個比較如果聲明 – esrtr

+0

@esrtr你需要使用''>「''而不是'>'來避免shell的默認重定向 –

+0

@Walter A ...你的解決方案是基於事實OP的系統是基於Linux和Unix的,但它是獨立於平臺的解決方案 –

2

你複製FD到FD 0,這是stdinstdout是FD 1.您還應該使用dup2,因此您可以明確指定要分配給哪個FD以及保存FD的宏。

dup2(fd, STDOUT_FILENO); 

你也應該改變

if (*args[i] == '>') 

if (strcmp(args[i], ">") == 0) 

否則,它與>開頭的參數匹配,即使以後有其它字符。

+0

我使用你的解決方案。現在沒有錯誤。感謝那。但是我仍然可以使用'>'創建文件,但是我無法在該文件上寫任何內容。 – esrtr