一道關於fork()的面試題

2021-06-26 17:45:42 字數 1019 閱讀 3750

昨天師兄乙個朋友找外企工作,幫他做程式設計題,其中一道比較有意思,如下

問輸出什麼?為什麼?

#include #include int main()

這道題感覺很有意思,算是知識的綜合。考慮清楚了,卻挺簡單

1. fork()的理解

fork()是乙個程序建立函式,乙個程序呼叫fork()函式後,系統先給新的程序分配資源,例如儲存資料和**的空間。然後把原來的程序的所有值都複製到新的新程序中,只有少數值與原來的程序的值不同。相當於轉殖了乙個自己。

最有特點的是;fork僅僅被呼叫一次,卻能夠返回兩次,它可能有三種不同的返回值:

1)在父程序中,fork返回新建立子程序的程序id(大於0);

2)在子程序中,fork返回0;

3)如果出現錯誤,fork返回乙個負值;

2. 邏輯運算子的理解

只看這個fork() && fork() || fork();會比較蛋疼,換一下,int a,b,c;  a,b,c為三個int型別的值,那麼a && b || c運算規律如下:

1)、a為假,那就不判斷b,接著判斷c

2)、a為真,這又要分為兩種情況:

2.1、b為真,這就不需要判斷c,  a && b || c表示式的值已經知道了

2.2、b為假,那還得判斷c

換成fork() && fork() || fork()也一樣,只不過是用返回的子程序id和返回的0判斷

3. 分析如下:(編號見上述**)

先不考慮第一行,先看第二行fork() && fork() || fork(),如下圖

所以fork() && fork() || fork() 這行一共建立了4個程序

4. 結果

第一行fork(),建立了乙個程序,所以該程式一共建立1 + 4*2 =  9個新程序

輸出10個*, 9個新程序輸出+最開始的程序輸出

一道關於fork的面試題

include include include int main 使用gcc編譯,4個程序,這在我的一篇部落格有講 fork遇上for迴圈 已知其中乙個程序 列印結果是 pid1 1002,pid2 1003 求其他程序列印的結果 不考慮執行順序,程序id順序連續分配 首先fork的返回值,父程序返...

從一道面試題開始說fork

自 http blog.csdn.net yuwenliang archive 2010 01 18 5209239.aspx 給出如下c程式,在linux下使用gcc編譯 1 include stdio.h 2 include sys types.h 3 include unistd.h 4 5 ...

一道面試題

一道面試題 射擊運動員10發打中90環有多少種可能,請編寫程式計算出來,並列印出結果,0環和10環均有效。打中90環就是沒打中10環,所以打中90環跟打中10環的可能性是一樣的。然後開始遞迴狂打槍,一到10就記錄 if params i 10 在迴圈的控制中已經排除了大於10的可能性 i 10 pa...