如何將execlp
輸出重定向到文件?例如,我想將execlp("ls", "ls", "-l", NULL)
的輸出重定向到輸出文件(比如說a.txt)。將execlp輸出重定向到文件
回答
要做到這一點是使用freopen函數打開一個新的文件,標準輸出的最簡單方法:
FILE * freopen函數(爲const char *限制的文件名,爲const char *限制模式, FILE *限制流);
從手冊頁的fopen(包括freopen函數):
調用freopen()函數打開文件 ,其名稱是字符串指出 通過文件名和相關聯的流指向與它流。 原始流(如果存在)已關閉。模式參數 是 ,就像在fopen()函數中一樣。
所以,你的情況,是這樣的:
#include <stdio.h>
FILE *myStdOut;
myStdOut = freopen("a.txt", "rw", stdout);
if (myStdOut == NULL)
// Error case, open failed
的細節可能會有所不同,從操作系統到操作系統和編譯器版本。
'freopen'不是這個的正確工具。甚至不保證使用相同的文件描述符編號,並且基本上不應該在POSIX程序中使用。 –
永遠不會在POSIX程序中使用,我的意思是從來沒有在使用裸ANSI/ISO C之外的POSIX功能的程序中,也就是說,使用'freopen'重定向'stdout'完全可以在你自己的進程中使用'stdio'輸出,但如果您在進程和新程序映像之間混合文件描述符io或文件描述符的繼承,則不適用。 –
如何關閉myStdOut? – miraj
你需要做的是這樣的:你想用`EXEC *`
int fd = open("output_file", O_WRONLY|O_CREAT, 0666);
dup2(fd, 1);
close(fd);
execlp("ls", "ls", "-l", (char *)0);
- 1. 重定向到execlp()
- 2. 將ttisql輸出重定向到文件
- 3. Ruby將輸出重定向到文件
- 4. 將lldb輸出重定向到文件
- 5. 將w輸出重定向到文件
- 6. 將ostream重定向到輸出文件
- 7. 重定向輸出到輸出文件
- 8. 重定向grep的輸出到文件
- 9. 輸出重定向到文件
- 10. 重定向輸出到文件
- 11. 輸出重定向到多個文件
- 12. 標準輸出重定向到文件
- 13. 重定向輸出到文件
- 14. iostat的重定向輸出到文件
- 15. 重定向vim:使輸出到文件
- 16. 將文件重定向到標準輸出 - 反向io重定向
- 17. 將輸入文件重定向到GProlog
- 18. 將多重輸出重定向到perl中的文件句柄
- 19. 將輸出重定向到一個可變定義的文件
- 20. 將輸出重定向到由VAR指定的文件名
- 21. python - 打印到stdout並將輸出重定向到文件
- 22. 如何將控制檯輸出重定向到文本文件
- 23. 將輸出重定向到MongoDB中的文本文件
- 24. Python:將文本解析輸出重定向到CSV文件
- 25. 將標準輸出重定向到屏幕和文本文件
- 26. 如何將程序輸出重定向到文本文件
- 27. 如何將nosetests的輸出重定向到文本文件?
- 28. 從命令行將輸出重定向到C文本文件
- 29. 將第二個exe的輸出重定向到文本文件
- 30. pscp文件傳輸錯誤輸出重定向到文件
你確定嗎?這些功能*用新的功能取代當前的過程。 –
是的,我可以使用'fork'創建一個子進程。 – miraj
@miraj:嗯,執行進程將繼承調用進程的文件描述符,因此您可以使用各種'fd *'函數關閉並重新打開文件描述符1(stdout)。 –