2012-11-26 73 views
1

我在C中實現shell,並且在實現重定向操作時,我看到輸出重定向工作正常,但輸入重定向操作不起任何作用。 (不顯示在標準輸出給出)Linux |在C |中執行Shell輸入重定向不顯示

COMMAND-> wc < out.txt 
Child 12878 died 0x008B 

COMMAND-> 

[其中命令 - >是我的提示]

當我打印孩子的狀態,當它死了,它得到0x8B的值。這是否意味着什麼?

我已經關注了這篇文章,重定向實現的核心部分與此處提出的內容類似。 Implementing shell in C and need help handling input/output redirection

這就是在輸入重定向發生的要點:

in = open(file_name, O_RDONLY); 
dup2(in,0); 
close(in); 
execvp("wc",args); 

(我不能發佈我的整個代碼,因爲這是一個活的功課,我可能最終趕上了MOSS)

+3

退出代碼0x008b(139:Segmentatation違例)通常意味着它被一個'SIGSEGV'終止,你在某處有段錯誤,'gdb'應該能告訴你更多。 – soulseekah

+0

gdb不會將其檢測爲分段錯誤。行爲相同。 – Vinoth

+1

我想補充一點,即使你給了它無效的文件描述符,wc本身也不可能出現segfault錯誤,但segfault可能在實際命令的'fork'調用和'exec'之間,並且在代碼中很可能存在設置重定向(正如你所說的那樣,它只在重定向時失敗)。 –

回答

0

execvp中傳遞的指針爲NULL,因此得到了SIGSEGV

輸入的命令根據管道和重定向分離它們的後端處理出錯。