嗨,我想在c中建立一個殼,我卡在I/O重定向部分。我必須支持多重定向,例如「333sh:myprog < in_file> out_file」myprog正在從in_file獲取輸入,結果將被重定向到out_file等。你能給我一個出發點嗎?謝謝殼牌I/O重定向
Q
殼牌I/O重定向
0
A
回答
0
無論你有什麼printf和scanf(或其他功能與stdin /標準輸出一起工作),將它們替換爲接收文件名參數(fprintf/fscanf)的函數,並在該文件參數中放置io重定向文件打開它。
1
因此,您正在編寫的shell具有啓動進程myprog
的工作,並以某種方式迫使其從in_file
讀取輸入並將其輸出寫入out_file
。
您要做的第一件事就是解析輸入。這意味着在程序中代表你想要啓動的進程的名稱,讀入的文件名以及要寫入的文件名。這樣做基本上需要對字符串myprog <in_file> out_file
進行標記,然後提出一些表示(如結構)來表示要做什麼。
如何實際實現重定向非常簡單。要啓動這個過程,我猜你會去fork()
,然後execvp
。要實現的事情是文件描述符跨叉複製並持續在execvps中。
所以基本上在外殼,使用dup(2)
調用了文件描述符替換爲STDIN_FILENO和input_file
與output_file
文件描述符替換STDOUT_FILENO。然後fork,然後execvp。在fork之後,在父進程(shell)中,您需要將STDOUT和STDIN文件描述符恢復到fork之前的狀態,因此您需要以某種方式記住這些信息。
相關問題
- 1. subprocess.Popen()IO重定向
- 2. 非標準io重定向
- 3. C#Shell - IO重定向
- 4. 子shell IO重定向
- 5. 殼牌錯誤:重定向在中風使用BC
- 6. 殼牌
- 7. Shell IO重定向命令,管版
- 8. 重定向Python解釋器的IO
- 9. slurm sbatch標準IO重定向
- 10. Linux的IO重定向顏色
- 11. 文件重定向在外殼環
- 12. Python子進程,子殼和重定向
- 13. 從外殼C++輸入重定向
- 14. 外殼重定向到一個整數?
- 15. 重定向外殼輸出Ruby腳本
- 16. 將文件重定向到標準輸出 - 反向io重定向
- 17. 殼牌和MySQL
- 18. 殼牌#內部(())
- 19. 批殼牌
- 20. 從殼牌
- 21. 殼牌問題
- 22. 從殼牌
- 23. 從雲殼牌
- 24. 從殼牌
- 25. 獲取殼牌
- 26. 轉換殼牌
- 27. 殼牌`和`awk`
- 28. 從殼牌
- 29. 初學殼牌
- 30. [殼牌]字符
+1但可能提及OP應該打開這些文件。 – Duck