2014-02-07 48 views
1

我有一個項目,我必須從.txt收集一些記錄並使用exec *()對它們進行排序。當我調用execl時,我對它們中的一些(例如前10條記錄)進行排序並同時(因爲我在execl之前使用了fork()),我使用另一個execl對一些記錄進行排序。但問題是第二個execl的記錄與第一個記錄相同。有沒有人知道處理記錄的方法,以便在每個execl中對不同的記錄進行排序?使用execl從txt收集數據

提前致謝!

+0

你在問如何使用多進程進行並行排序嗎? – A4L

+0

你究竟在排序什麼?如果您使用2個進程對記錄進行排序比較。你應該再次對排序後的記錄進行排序,以便得到最終結果 – const

+0

實際上,我使用了一個二叉樹,其中每個子都由fork()創建。當我到達葉子時,我再次調用fork()然後execl。然後我可以通過execl程序快速排序(左邊的葉子)和一個shell排序(右邊的葉子)。所以排序的數量不是靜態的。是的,我排序記錄(例如,每個記錄只是一個數字) –

回答

0

在高層次上,您需要讓每個進程僅在文件的一部分上工作。這意味着您需要向每個進程傳達他們需要處理的文件的哪一部分。有不同的選項可以完成此操作,但其中一個是讓每個進程跳過不應在調用exec()之前處理的行。或者,爲每個進程設置不同的管道,主進程將輸入提供給每個工作進程。還有其他幾種可能性。

+0

我必須使用管道將結果發送回樹的根。這是我在OS中的第一個項目,所以我不知道是否可以使用管道將程序的結果傳遞給另一個(儘管execl)。那是你上面寫的嗎? –

+0

由於傳統的管道是單向的,因此您需要一對管道才能進行雙向通信。 – jxh

+0

感謝您的建議,我會嘗試它,我會告訴。 –