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)
退出代碼0x008b(139:Segmentatation違例)通常意味着它被一個'SIGSEGV'終止,你在某處有段錯誤,'gdb'應該能告訴你更多。 – soulseekah
gdb不會將其檢測爲分段錯誤。行爲相同。 – Vinoth
我想補充一點,即使你給了它無效的文件描述符,wc本身也不可能出現segfault錯誤,但segfault可能在實際命令的'fork'調用和'exec'之間,並且在代碼中很可能存在設置重定向(正如你所說的那樣,它只在重定向時失敗)。 –