Cette fonction accepte le nombre de termes de la séquence de Fibonacci dans le processus enfant, crée un tableau et redirige la sortie vers le parent via un tube. Le parent doit attendre que l'enfant développe la série de Fibonacci. Le texte reçu affiche toujours -1, bien que le texte transmis affiche le nombre de chiffres saisis *4, ce qui est acceptable.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#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;
}