linux系统下每个进程都有自己独立的内存空间,但实际应用却需要它们互相的通信去完成某项复杂的任务,这与面向对象程序的设计思想:高内聚,低耦合的思想一脉相承。linux下进程通信的方式:1.管道 2.有名管道(FIFO) 3.消息队列 4.共享内存 5.UNIX套接字。管道主要用于父子进程中,而有名管道是用于无亲缘关系的进程中。管道在linux命令很常见,如 who | sort | lp ,who的进程的输出是sort进程的输入,sort进程的输出又是lp进程的输入。共享内存是最快的一种通信方式。
1.管道(pipe)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | |
管道两个文件描述符通过参数传给子程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | |
2.有名管道(FIFO)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | |
子进程只要打开同样的FIFO文件,得到其文件描述符,就可以与父进程通信
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | |
3.共享内存(mmap)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | |