18
A
回答
2
您也可以使用pipe(2,3p)
。創建管道,分叉,將管道的相應末端複製到孩子的FD 0或FD 1上,然後執行exec。
25
前兩個命令的一個小例子。您需要使用pipe()函數創建一個管道,該函數將在ls和grep之間以及grep和more之間的其他管道之間移動。 dup2做的是將文件描述符複製到另一個文件描述符中。管道通過將fd [0]中的輸入連接到fd [1]的輸出來工作。您應該閱讀管道和dup2的手冊頁。如果您有其他疑問,我可以稍後嘗試並簡化示例。
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#define READ_END 0
#define WRITE_END 1
int
main(int argc, char* argv[])
{
pid_t pid;
int fd[2];
pipe(fd);
pid = fork();
if(pid==0)
{
printf("i'm the child used for ls \n");
dup2(fd[WRITE_END], STDOUT_FILENO);
close(fd[WRITE_END]);
execlp("ls", "ls", "-al", NULL);
}
else
{
pid=fork();
if(pid==0)
{
printf("i'm in the second child, which will be used to run grep\n");
dup2(fd[READ_END], STDIN_FILENO);
close(fd[READ_END]);
execlp("grep", "grep", "alpha",NULL);
}
}
return 0;
}
相關問題
- 1. 用dup2創建管道
- 2. 通過管道/ DUP2用C
- 3. 用管,叉,DUP2
- 4. linux dup2 doens似乎與管道工作?
- 5. 使用dup2()系統調用管道超過3個程序?
- 6. 無法解釋的行爲與補充手動管道使用dup2
- 7. 使用dup2排序
- 8. 在C中關閉管道,dup2,文件描述符?
- 9. 使用管道
- 10. 使用管道
- 11. 使用管道
- 12. 使用渠道去管道
- 13. 使管道縮短管道
- 14. 在C++中使用管道()的管道管道
- 15. 使用Yahoo!管道
- 16. 使用sklearn管道
- 17. 在Linux中使用管道C使用管道
- 18. 重定向輸出在Unix中的dup2和管道代碼中的困難
- 19. 使用dup2系統調用兩次?
- 20. 定期讀取使用dup2重定向到管道的標準輸出內容的問題
- 21. 如何在子進程中使用dup2?
- 22. 如何使用dup和/或dup2將標準重定向到管道,然後輸出到antoher管道然後返回標準輸出?
- 23. 管道使用C++處理
- 24. 使用i18n選擇管道
- 25. 使用ffmpeg的NodeJS管道
- 26. 使用PostgreSQL破壞管道
- 27. 在Linux中使用管道(|)
- 28. netty管道使用多少
- 29. 使用console.log與管道
- 30. 使用UNIX管道與C
它可以只使用一個fork()和使用原始過程無論是LS或grep的,但還有我會留給你加以改進:P – theprole 2010-09-04 17:40:40
我們應該怎麼管的grep的輸出越多。這只是把兩個過程正確地對準? – CanCeylan 2012-02-12 23:03:02
不應該關閉grep的WRITE_END和ls的READ_END(與您所做的相反)? – 2015-05-10 11:45:05