Linux学习笔记-协同进程基础
生活随笔
收集整理的這篇文章主要介紹了
Linux学习笔记-协同进程基础
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目錄
?
基本概念
代碼
基本概念
如果要進程單項通信,創(chuàng)建一個管道就可以了,雙向通信要創(chuàng)建兩個管道!
協(xié)同進程:
兩個進程通過兩個管道進行雙向通信!
?
如實現(xiàn)一個實例!
父進程通過fda[1]寫入x和y的值給管道a!
子進程通過fda[0]讀取管道的x和y的值!
子進程通過調用外部add程序,進行兩個數(shù)的累加!
累加好的數(shù)值調用fdb[1]寫入管道b!
然后父進程通過fdb[0]讀取管道b中的累計結果并輸出!
代碼
源碼有2個,一個是累加的源碼,也就是add.c
另外一個是管道相關的源碼,為co_process.c
?
co_process.c
源碼如下:
#include <unistd.h> #include <string.h> #include <stdlib.h> #include <stdio.h>int main(void){int fd[2];if(pipe(fd) < 0){perror("pipe error!");exit(1);}pid_t pid; if((pid = fork()) < 0){perror("fork error");exit(1);}else if(pid >0 ){ // parent processclose(fd[0]);int start = 1, end = 100;//往管道中寫數(shù)據(jù)if(write(fd[1], &start, sizeof(int)) != sizeof(int)){perror("write error");exit(1); }if(write(fd[1], &end, sizeof(int)) != sizeof(int)){perror("write error");exit(1);}close(fd[1]);wait(0);}else{ //child processclose(fd[1]);int start, end;if(read(fd[0], &start, sizeof(int)) < 0){perror("read error");exit(1);}if(read(fd[0], &end, sizeof(int)) < 0){perror("read error");exit(1);}close(fd[0]);printf("child process read start: %d , end: %d \n", start, end);}exit(0); }?
add.c源碼如下:
#include <unistd.h> #include <string.h> #include <stdio.h> #include <stdlib.h>int main(void){int x, y;if(read(STDIN_FILENO, &x, sizeof(int)) < 0){perror("read error");}if(read(STDIN_FILENO, &y, sizeof(int)) < 0){perror("read error");}int result = x + y;if(write(STDOUT_FILENO, &result, sizeof(int)) != sizeof(int)){perror("write error");}exit(0); }?
程序運行截圖如下:
總結
以上是生活随笔為你收集整理的Linux学习笔记-协同进程基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++设计模式-面向对象程序设计要点以及
- 下一篇: Qt工作笔记- 解决cc1plus.ex