2014-02-12 40 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

希望这有助于与此相关的代码。

相关问题