程序通过管道系统调用生成斐波那契系列

时间:2013-09-05 15:11:54

标签: c unix operating-system fibonacci

此代码接受否。子进程中的fibonacci系列术语创建一个数组并通过管道将输出重定向到父进程。父母必须等到孩子产生斐波那契系列。 收到的文本总是显示-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;
}

1 个答案:

答案 0 :(得分:0)

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

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

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