进程之间的通信
第一题:
现在有2个.c 文件 1.c负责输入2个非0数,a 和 b 2.c负责找出 a 到 b 之间的所有质数 要求使用无名管道实现
#include <myhead.h>
int isPrime(int n){
for(int i = 2; i < n; i++){//如果n被i整除,则返回false
if(n % i==0){
return -1;
break;
}
}
return 0;// 反之则返回true
}
int main(int argc, const char *argv[])
{
int rfd = atoi(argv[1]);
int wfd = atoi(argv[2]);
close(wfd);
while(1){
int buf[2] = {0};
read(rfd, buf, 8);
//printf("%d %d\n", buf[0], buf[1]);
//sleep(1);
if(buf[0] > buf[1]){
buf[0] = buf[1] + buf[0] - (buf[1] = buf[0]);
}
buf[0] += 1;
while(1){
if(buf[0] >= buf[1]){break;}
int num = isPrime(buf[0]);
if(num == 0){printf("%d \n", buf[0]);}
buf[0] += 1;
}
}
return 0;
}
#include <myhead.h>
int main(int argc, const char *argv[])
{
int arr[2] = {0};
int res = pipe(arr);
if(res == -1){
perror("pipe");
return 1;
}
res = fork();
if(res > 0){
close(arr[0]);
while(1){
int buf[2] = {0};
printf("请输入两个非零数:");
scanf("%d %d", buf, buf + 1);
while(getchar() != 10);
write(arr[1], buf, 8);
usleep(1000);
}
}else{
char arr0[16] = {0};
char arr1[16] = {0};
sprintf(arr0, "%d", arr[0]);
sprintf(arr1, "%d", arr[1]);
execl("./g", "./g", arr0, arr1, NULL);
}
return 0;
}
第二题
创建一对父子 父进程负责输入一串字符串 子进程负责判断这串字符串是否为回文字符串
第三题
原文地址:https://blog.csdn.net/weixin_73503608/article/details/140647015
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!