Test Program 3
Input
-
Output
Integers 1 to 100, not necessarily in the order.
Description : The program creates a linked list with numbers 1 to 100 in them. The program invokes fork to create a child process. The parent and the child process reads from the shared linked list with different pointers and prints the data read to the console. Parent process prints the even numbers 2, 4, 6, 8.. and child process prints 1, 3, 5 ..
type
List
{
    int data;
    List next;
}
endtype
decl
    List head;
    int x, pid, temp, length;
enddecl
int main()
{
decl
    List p, q;
    int i;
enddecl
begin
    temp = exposcall("Heapset");
    head = null;
    q = head;
    length=1;
    while (length <= 100)  do
        p = exposcall("Alloc",2);
        p.data = length;
        p.next = null;
        if (head == null) then
            head = p;
            q = p;
        else
            q.next = p;
            q = q.next;
        endif;
        length = length+1;
    endwhile;
    pid = exposcall("Fork");
    if(pid == 0) then
        p = head;
        while(p != null)  do
            x = p.data;
            temp = exposcall("Write",-2,x);
            p = p.next;
            if(p == null) then
                break;
            endif;
            p = p.next;
        endwhile;
    else
        q = head.next;
        while(q != null)  do
            x = q.data;
            temp = exposcall("Write",-2,x);
            q = q.next;
            if(q == null) then
                break;
            endif;
            q = q.next;
        endwhile;
    endif;
    return 0;
end
}