C 通过管道系统调用生成斐波那契级数的程序

C 通过管道系统调用生成斐波那契级数的程序,c,unix,operating-system,fibonacci,C,Unix,Operating System,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)

这段代码在创建数组并通过管道重定向到父进程的子进程中接受斐波那契级数的项数。父项必须等到子项生成斐波那契级数。 接收到的文本始终显示-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;
}
#包括
#包括
#包括
#包括
int*fibo(int n)
{
int*a=(int*)malloc(n*sizeof(int));
*(a+0)=0;
*(a+1)=1;
int i;

对于(i=0;i使用单独的缓冲区进行读取

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

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

您应该修复代码中的空白,这很难读取。仍然不工作我使用了单独的缓冲区,并给出了输入5,因此它显示发送:20接收:0有效的感谢。我实际上使用的是sizeof(缓冲区),但不工作。