linux两个子进程通信,Linux c 匿名管道实例—创建两个子进程与父进程进行管道通信...
综合:
建立两个子进程:
一个负责计算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 匿名管道实例—创建两个子进程与父进程进行管道通信...相关推荐
- Linux系统编程:fork函数的使用【循环创建N个子线程】
fork函数介绍 在linux下面进行系统编程,一定要养成一个好习惯,不懂的函数 直接 找男人,用man 指令进行查看,虽然是全英文 但是要强迫自己 学会看英文文档!下面是介绍,我们看重点. FORK ...
- 2022非常全的软件测试linux常用命令全集,linux面试题及参考答案
一.前言: 作为一名软件测试工程师,我相信大部分的人都和Linux打过交道,因为我们的服务器一般都是装的Linux操作系统,包括各种云服务器也都是用的Linux,目前主流是CentOS7,那么对于一个 ...
- edu-【Linux 与 Python编程2021】Linux知识训练,Linux之用户管理,Linux文件/目录管理
python实训 python学习 – 菜鸟教程+B站视频 文章目录 linux知识训练-硬件与软件安装 第1关:linux知识训练-硬件与软件安装 linux知识训练-账户进程与权限 第1关:lin ...
- 从o开始的pwn学习之随意pwnpwn(1)----两种绕过canary(金丝雀)的实例
文章目录 从0开始的pwn学习之随意pwnpwn(1)----两种绕过canary(金丝雀)的实例 金丝雀基础知识 canary是如何工作的 原理 覆盖00字符读出canary 原理 利用条件 实例- ...
- linux 两个子进程,父进程创建两个子进程,在收到中断信号后杀死两个子进程
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按^c键):捕捉到中断信号后,父进程用系统调用kill( ...
- Linux中fork()系统调用创建两个子进程
使用系统调用fork()创建两个子进程: #include <stdio.h> #include <unistd.h>int main(){int fpid = fork(); ...
- linux编程两个子进程,Linux中fork同时创建多个子进程的方法
怎么创建多个进程呢?我说那还不容易,看下边代码: //省略必要头文件 int main() { pid_t pid[2]; int i; printf("This is %d\n" ...
- php利用socket_pair进程通信,Linux上实现双向进程间通信管道(socketpair)
管道pipe是半双工的,pipe两次才能实现全双工,使得代码复杂.socketpair直接就可以实现全双工 socketpair对两个文件描述符中的任何一个都可读和可写,而pipe是一个读,一个写 L ...
- linux 同一进程内通信,linux中,管道能够在同一进程中进行通信吗?
linux中,管道能够在同一进程中进行通信吗? 答案是否定的. 管道是用于不同进程之间通信,不能再同一进程中进行通信. 同一进程中,直接进行参数传递就行了,不设计通信问题. 不同进程之间才需要通信,通 ...
最新文章
- Linux Shell执行原理
- js 事件函数中的参数带换行符或换行标签都不能起作用的解决方法
- mac 端口占用_第二章 感受Mac 之美-惊艳从Mac 外设开始,一周后的使用感受
- Cell.reuseIdentifier 指什么
- android ble 调试工具,分享一个蓝牙BLE调试小程序LightBlue
- SAP ABAP table control中用帮助(F4)实现自动填充另一字段教程
- 简单的时间间隔调度任务
- 使用TypeScript开发ReactNative应用的简单示例
- 吉米多维奇数学分析_《吉米多维奇数学分析习题集》到底是一本怎样的书?
- 1.从第一道面试题谈起
- 7654劫持火狐解决办法
- 华三交换机升级的ipe文件_H3C交换机升级步骤
- if语句——python
- 为什么开发与测试老掐架呢
- mysql查询datetime的年月日_mysql 里面的date datetime怎么才能只取年月日
- 西门子哪款plc支持c语言,西门子PLC三种语言的区别
- SUSE史上首位女性CEO Melissa Di Donato,不止有“三把火”
- CentOS安装mysql*.rpm提示conflicts with file from package的解决办法
- lssvm聚类研究(Matlab代码实现)
- Python 拼接wav音频
热门文章
- 计算机网络考试重点复习(本科)
- 电力电子学习笔记1电力电子器件概述
- 大于或小于100万,1000万,1亿,10亿,1000亿,万亿,亿亿,10亿亿,100亿亿上下的10个质数(素数)...
- 黑苹果(OpenCore)踩坑之安装系统正常重启以后无法进入系统#[EB|WL] 0 0 0x01 0x0B 20 0x0E
- 酷讯的今天应引起创业者警醒
- 绘制Excel字符画
- 饮用水中的氟化物超标怎么去除、除氟工艺介绍
- 偏振器件传输矩阵matlab编程,偏振器件的琼斯矩阵
- 读《测试构架师修炼之道》-Chapter3 测试构架师应该做的事
- 猿辅导推出人文博雅素养课程 奥运冠军杨扬化身领读人