0

此代码是接受否。子进程中斐波那契数列的术语创建一个数组并通过管道将输出重定向到父进程。父母必须等到孩子生成斐波那契数列。收到的文本总是显示-1,而发送的文本显示输入的整数个数*4,这很好。

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<string.h>

int* fibo(int n)
{
    int* a=(int*)malloc(n*sizeof(int));
    *(a+0)=0;
    *(a+1)=1;
    int i;
    for(i=0;i<n-2;i++)
    {
        *(a+i+2)=*(a+i)+(*(a+i+1));
    }
    return a;
    }


    int main()
    {
        int* fib;
        int fd[2];
        pid_t childpid;
        int n,nb;

        int k=pipe(fd);
        if(k==-1)
        {
        printf("Pipe failed");
        return 0;
    }

    childpid=fork();
    if(childpid == 0) 
    {
        printf("Enter no. of fibonacci numbers");
        scanf("%d",&n);
        fib=fibo(n);
        close(fd[0]);
        nb=(fd[1],fib,n*sizeof(int));
        printf("Sent string: %d \n",nb);
        exit(0);
    }
    else
    {
        wait();
        close(fd[1]);
        nb= read(fd[0],fib,n*sizeof(int));
        printf("Received string: %d ",nb);
    }
    return 0;
}
4

1 回答 1

0

使用单独的缓冲区进行读取。

int buffer[n];
nb= read(fd[0],buffer,n*sizeof(int));

您无需wait()在父进程中执行

于 2013-09-05T15:19:13.593 回答