自学内容网 自学内容网

进程之间的通信

第一题:

现在有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)!