針對fork的呼叫問題。(騰訊筆試題)

2021-06-09 20:42:47 字數 886 閱讀 3230

首先貼上兩個題目:

#include#include#includeint main(void)

return 0;

}

#include#include#includeint main(void)

return 0;

}

大家先比較下這兩個程式的不同之處,相信大家可以看到,就是在printf函式中多了乙個還行符號,但是不要小看這個符號,這個在linux中需要進行理解的。

因為linux中是緩衝區機制,當printf遇到還行符號的時候才會列印。

這個題總結下來考察兩點,乙個是printf的行為,乙個是fork的行為。fork的行為如下:第一,當fork呼叫的時候會返回兩次,分別在父程序和子子程序中,父執行緒中返回子程序的pid,而子程序中返回0,表示執行成功。同時,子程序和父程序的執行位置都是fork之後的語句。子程序執行成功後,他的行為是拷貝父程序的資料區,其中就包括緩衝區。

那下面來解釋第乙個程式:

當i=0,的時候,建立乙個新的程序,這時候有兩個程序,但是因為父程序中的緩衝區並沒有內容,所以子程序緩衝區中也沒有資料。第一次迴圈結束,兩個程序中的緩衝區分別存放了乙個「-」,但是沒有輸出哈。當i=1,的時候,兩個程序中都進行fork,那麼結果就會有四個程序,新建立的兩個程序都拷貝父程序的緩衝區,這時每個程序中的緩衝區存放乙個「-」。同時四個程序都執行fork後的語句,printf,四個程序中各有兩個「-」。這樣,在迴圈結束之後,程式結束之前,要清理緩衝區,所以每個程序輸出兩個「-」,加起來就是有8個。但是如果在printf中加了回車符號的話,那麼在i=0,迴圈結束之後,兩個程序的緩衝區都沒有內容,因為遇到還行符號輸出了。當i=1,的時候,各個程序又往自己的緩衝區中放了乙個''-",所以一共有六個。

騰訊筆試 資料庫問題

題目描述 設檔案f具有10000個記錄,每個記錄50位元組,其中10位元組用來表示檔案的鍵值。每個磁碟塊大小1000位元組,指向磁碟塊的指標佔5位元組,不允許記錄跨兩個塊。1 如果為檔案f建立簡單的hash索引,使用100個hash桶,則桶目錄需要多少磁碟塊?平均每個桶需要多少磁碟塊?2 如果為檔案...

騰訊筆試 n人組隊問題

某部門共有n nn個人,現在需要從所有人中選出任意數量 大於0 的人組成乙個小隊,並從中選出乙個隊長,那麼一共有多少種組隊方式?其中1 n 109 1 n 10 9 1 n 10 9,由於組隊方式的數目可能會很大,請將結果對 10 9 7 10 9 7 109 7 取餘後輸出。輸入 2 輸出 4 如...

python中fork 的呼叫

1 說明 fork 可以在 python 程式中輕鬆建立子程序,實現多程序。unix linux 作業系統 比如常見的 mac 咯 提供了乙個 fork 系統呼叫,它被呼叫一次,返回兩次,因為作業系統自動把當前程序 稱為父程序 複製了乙份 稱為子程序 然後分別在父程序和子程序內返回。2 例項 imp...