【发布时间】:2021-10-01 14:38:22
【问题描述】:
我想解决这个问题,但我无法接受输入消息:
创建一个执行以下操作的程序:
1.创建父子进程
2.父进程从键盘读取一个数字并发送给子进程
3.孩子计算给定的数字是否为素数并将结果打印在屏幕上
这是我的代码:
#include <iostream>
#include <unistd.h> // for fork()
#include <string.h> // for strerror()
#include <sys/wait.h>
#include <sys/types.h>
using namespace std;
bool isprime(int number);
int main()
{
int num;
pid_t pid;
int fd[2];
char buffer[100];
pipe(fd);
pid = fork();
//parent process
if (pid > 0)
{
cin>>num;
write(fd[1], &num, sizeof(num));
close(fd[1]);
int status;
//Do not check for errors here
wait(&status);
}
//child process
else if (pid == 0)
{
read(fd[0], buffer, 100);
close(fd[0]);
if (isprime(num))
{
cout<<"number is prime";
}
else
{
cout<<"number is not prime";
}
return EXIT_SUCCESS;
}
else
{
cout << "fork() failed (" << strerror(errno) << ")" << endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
bool isprime(int number)
{
if (number < 2)
return false;
if (number == 2)
return true;
for (int i = 2; (i*i) <= number; i++)
{
// Take the rest of the division
if ((number % i) == 0)
return false;
}
return true;
}
【问题讨论】:
-
@Gal 这不是 read 的工作方式......它应该返回 4 个字节。
-
是的,运行时会发生什么?
-
当我运行程序时,它不接受 num 的输入值。它采用值“1”而不是输入值。这就是它计算“1”值的原因。