in Operating System retagged by
4,749 views
9 votes
9 votes

A process execute the code:
 

main()
{
    fork();
    fork() && fork() || fork();
    fork();
    printf("Hi");
}  



The number of times "Hi" will be printed is

in Operating System retagged by
4.7k views

11 Comments

2 times

https://ideone.com/Wb7VoK

Only for last fork it will be created

0
0

@srestha, don't run the program in compiler... it give wrong result

i hope it would be 20.

2
2
9.
0
0
I'm getting 20.
How did you get 9, @deepanshu?
0
0
ans is 20.
0
0

Vikas Verma i miss one fork  completely  while writing question in copy..... 

 

0
0

@Warrior

it is your responsibility to check is it previously asked or not before posting the question.

 

@Deepanshu,@Vikas Verma

you have to check before you attempt, otherwise simply your time will waste due to the discussion

0
0
0
0
0
0
Is the answer 20?
1
1

$Ans: 20$

$ \left((fork()\ \&\&\ fork() )\ ||\ fork() \right)$



$(p,c4,c8,c2,c6,c1,c5,c9,c3,c7)\times 2=20$

1
1

2 Answers

13 votes
13 votes
Best answer

Basic points : -

1) && ===> if left side operand evaluates to 0 then right side operator doesn't evaluate

2) ||   ===> if left side operand evaluates to 1 then right side operator doesn't evaluate

3) fork() ====> Doubling the processes ( one parent copy and one child copy )

4) Precedence of && is grater than precedence of ||

 fork() && fork() || fork() equivalent to  ( fork() && fork() ) || ( fork() ) , note that result of this statement doesn't used for next statement

 

for better clarity of image https://drive.google.com/drive/folders/1aji_OQGkDY9atCk6zwGhl5dYeMWXMm-c

selected by

4 Comments

if(fork())  \\ P>0 , C2=0 , C1>0 , C3=0
 {
        if(fork());  \\ (P>0 , C4=0) , (C1>0 , C5=0)
        else
            fork(); \\ (C4>0 , C6=0) , (C5>0 , C7=0)
}
else
  fork(); 

in the code written by soumya 

0
0
yes, that I was telling. How it could be correct, I am not getting

can u explain a bit?
0
0

now i understood, your problem, how this equivalent code written?

fork() && fork() || fork();

e1 && e2 || e3 ; ===> ( ( e1 && e2 ) || ( e3 ) )

first e1 executed, if it is false then e2 can't executed, go to e3

first e1 executed, if it true, then

           1) e2 executed if it is true, then e3 can't executed

           2) e2 executed if it is false, then e3 executed 


if( e1 )

{

}

else

{

   e3;

}


if(e1)

{

          if(e2)

         {

                

         }

        else

        {

             e3;

        }

}

else

{

        e3;

}


if(fork())

{

          if(fork())

         {

                

         }

        else

        {

             fork();

        }

}

else

{

        fork();

}


remaining code written as it is

5
5
0 votes
0 votes
Answer should be 20

Related questions