综合:

建立两个子进程:

一个负责计算1-50000的素数

另外一个负责计算50001-100000

父进程负责存储

利用fork创建两个子进程的框架:

#include

#include

#include

void  main()

{

int   id = 1;

while(1)

{

if(fork())

{

if(id>2)           //循环创建两个子进程

{

break;

}

continue;

}

else

{

//子进程

while(1)

{

//子进程处理

}

exit(0);      //子进程处理完就退出,父进程处理不会影响子进程

}

}

//以下父进程处理

}

注:此创建两个子进程的框架、只是两个子进程处理相同的问题。

程序代码:

#include

#include

#include

#include

#include

#include

#include

intidx=0;

intfddata;

voidhandle(int s)

{

int status;

if(s==SIGCHLD)

{

wait(&status);

idx++;

if(idx==2)

{

close(fddata);

printf("任务完成\n");

exit(-1);

}

}

}

intisprimer(int ta)

{

int i=2;

for(;i

{

if(ta%i==0)

{

return 0;

}

}

return 1;

}

main()

{

int a,b;

int id=1;

int fd[2];

signal(SIGCHLD,handle);

pipe(fd);

while(1)

{

if(id==1){

a=2;b=50000;

}

if(id==2){

a=50001;b=100000;

}

if(fork()){

id++;

if(id>2){

break;

}

continue;

}

else{

//子进程

int i;

close(fd[0]);

for(i=a;i<=b;i++)

{

if(isprimer(i))

{

write(fd[1],&i,sizeof(int));

}

sched_yield();

}

printf("%d任务完成!\n",getpid());

exit(0);

}

}

int re;

char buf[20];

//打开文件,准备存储

close(fd[1]);

fddata=open("result.txt",

O_RDWR|O_CREAT,0666);

while(1)

{

read(fd[0],&re,sizeof(int));

sprintf(buf,"%d\n",re);

write(fddata,buf,strlen(buf));

sched_yield();

}

}

注:sched_yield()函数—让出cpu,让其他进程先执行。

SIGCHLD 子进程结束后系统向父进程发送的信号,告诉父进程,子进程已经结束。

linux两个子进程通信,Linux c 匿名管道实例—创建两个子进程与父进程进行管道通信...相关推荐

  1. Linux系统编程:fork函数的使用【循环创建N个子线程】

    fork函数介绍 在linux下面进行系统编程,一定要养成一个好习惯,不懂的函数 直接 找男人,用man 指令进行查看,虽然是全英文 但是要强迫自己 学会看英文文档!下面是介绍,我们看重点. FORK ...

  2. 2022非常全的软件测试linux常用命令全集,linux面试题及参考答案

    一.前言: 作为一名软件测试工程师,我相信大部分的人都和Linux打过交道,因为我们的服务器一般都是装的Linux操作系统,包括各种云服务器也都是用的Linux,目前主流是CentOS7,那么对于一个 ...

  3. edu-【Linux 与 Python编程2021】Linux知识训练,Linux之用户管理,Linux文件/目录管理

    python实训 python学习 – 菜鸟教程+B站视频 文章目录 linux知识训练-硬件与软件安装 第1关:linux知识训练-硬件与软件安装 linux知识训练-账户进程与权限 第1关:lin ...

  4. 从o开始的pwn学习之随意pwnpwn(1)----两种绕过canary(金丝雀)的实例

    文章目录 从0开始的pwn学习之随意pwnpwn(1)----两种绕过canary(金丝雀)的实例 金丝雀基础知识 canary是如何工作的 原理 覆盖00字符读出canary 原理 利用条件 实例- ...

  5. linux 两个子进程,父进程创建两个子进程,在收到中断信号后杀死两个子进程

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按^c键):捕捉到中断信号后,父进程用系统调用kill(  ...

  6. Linux中fork()系统调用创建两个子进程

    使用系统调用fork()创建两个子进程: #include <stdio.h> #include <unistd.h>int main(){int fpid = fork(); ...

  7. linux编程两个子进程,Linux中fork同时创建多个子进程的方法

    怎么创建多个进程呢?我说那还不容易,看下边代码: //省略必要头文件 int main() { pid_t pid[2]; int i; printf("This is %d\n" ...

  8. php利用socket_pair进程通信,Linux上实现双向进程间通信管道(socketpair)

    管道pipe是半双工的,pipe两次才能实现全双工,使得代码复杂.socketpair直接就可以实现全双工 socketpair对两个文件描述符中的任何一个都可读和可写,而pipe是一个读,一个写 L ...

  9. linux 同一进程内通信,linux中,管道能够在同一进程中进行通信吗?

    linux中,管道能够在同一进程中进行通信吗? 答案是否定的. 管道是用于不同进程之间通信,不能再同一进程中进行通信. 同一进程中,直接进行参数传递就行了,不设计通信问题. 不同进程之间才需要通信,通 ...

最新文章

  1. Linux Shell执行原理
  2. js 事件函数中的参数带换行符或换行标签都不能起作用的解决方法
  3. mac 端口占用_第二章 感受Mac 之美-惊艳从Mac 外设开始,一周后的使用感受
  4. Cell.reuseIdentifier 指什么
  5. android ble 调试工具,分享一个蓝牙BLE调试小程序LightBlue
  6. SAP ABAP table control中用帮助(F4)实现自动填充另一字段教程
  7. 简单的时间间隔调度任务
  8. 使用TypeScript开发ReactNative应用的简单示例
  9. 吉米多维奇数学分析_《吉米多维奇数学分析习题集》到底是一本怎样的书?
  10. 1.从第一道面试题谈起
  11. 7654劫持火狐解决办法
  12. 华三交换机升级的ipe文件_H3C交换机升级步骤
  13. if语句——python
  14. 为什么开发与测试老掐架呢
  15. mysql查询datetime的年月日_mysql 里面的date datetime怎么才能只取年月日
  16. 西门子哪款plc支持c语言,西门子PLC三种语言的区别
  17. SUSE史上首位女性CEO Melissa Di Donato,不止有“三把火”
  18. CentOS安装mysql*.rpm提示conflicts with file from package的解决办法
  19. lssvm聚类研究(Matlab代码实现)
  20. Python 拼接wav音频

热门文章

  1. 计算机网络考试重点复习(本科)
  2. 电力电子学习笔记1电力电子器件概述
  3. 大于或小于100万,1000万,1亿,10亿,1000亿,万亿,亿亿,10亿亿,100亿亿上下的10个质数(素数)...
  4. 黑苹果(OpenCore)踩坑之安装系统正常重启以后无法进入系统#[EB|WL] 0 0 0x01 0x0B 20 0x0E
  5. 酷讯的今天应引起创业者警醒
  6. 绘制Excel字符画
  7. 饮用水中的氟化物超标怎么去除、除氟工艺介绍
  8. 偏振器件传输矩阵matlab编程,偏振器件的琼斯矩阵
  9. 读《测试构架师修炼之道》-Chapter3 测试构架师应该做的事
  10. 猿辅导推出人文博雅素养课程 奥运冠军杨扬化身领读人