2014-02-12 34 views
-1

我試圖找到一種方法來從txt文件中讀取數據,而我使用不同的進程。例如,我在進程A中,並且讀取文件的前10條記錄(可以說有100條記錄)。在過程B中,我想讀取下十條記錄。問題是,只有在A過程中我纔會記錄正確的記錄,而當我處於B過程中時,我只取0。提前致謝!通過很多進程讀取相同txt的不同部分

+1

您的流程將不得不就彼此的進展進行溝通。這可以通過各種風格的共享狀態(例如需要同步的共享存儲器)或通過IPC(進程間通信)來完成。這是我們所特定的,因爲我可以得到給定的非特異性的問題。 – DevSolar

+0

您錯過了很多細節。什麼是「記錄」? (它是固定的字節數,還是由特定的分隔符或其他內容決定的?)您如何閱讀它們? (你用的fread,讀取或別的東西嗎?)是工藝流程A和B相關的(它們是同一進程羣中?是一個接一個的父母嗎?他們甚至在同一臺機器上運行?)如果沒有細節,將很難診斷你的問題。 –

回答

0

如果你深入挖掘,尤其是在linux環境下,你會發現線程比進程更輕量,當它實現需要多個執行的東西時。 我會以下列方式執行此操作:

  1. 創建一個具有10個線程的進程。每個線程將從TXT文件中讀取10條記錄。 (我將需要使用pthread_create()而不是fork())。我還將創建一個互斥鎖,每個線程在讀取文件時都會鎖定它。
  2. 我將創建TH1(thread_1)使用上述呼叫,鎖定互斥,打開文件,讀取使用read()呼叫,緩衝區將容納所有100個記錄,篩選出我需要在那個時間點,這10,完成後解鎖互斥體,使用pthread_join()
  3. 重複步驟2共10次,以便記錄所有記錄。
0

這可以通過使用Inter-process Communication主要涉及shared-memorysemaphoresmessage-queues來完成。有關這方面的基本知識,您可以read my blog

另一種方法是通過在進程之間傳遞文件描述符。一個進程打開文件,讀取10條記錄,然後將其傳遞給第二個進程。這是做同樣的事情,並將其發送到第一個。整個過程重複,直到文件結束。

文件描述符的傳遞是使用UNIX Domain Sockets主要是做,你可以找到在this answer

希望這有助於與此相關的代碼。

相關問題