我想通过使用tshark实用程序(使用system()命令)使用一个线程来获取数据包字段,然后将输出重定向到文件。同一个文件需要同时由另一个线程读取,以便它可以根据文件中观察到的字段做出运行时决策。
我现在遇到的问题是即使第一个线程正在写入文件,第二个线程也无法读取它(它从文件中读取NULL)。我不确定为什么它会这样做。我认为这可能是由于同时访问同一个文件。我想过使用互斥锁但会阻塞读取线程,因为第一个线程只会在程序终止时结束。
关于如何去做的任何想法?
答案 0 :(得分:2)
如果您正在使用该文件进行进程间通信,则可以改为使用命名管道或消息队列。它们更容易使用,不需要同步,因为一个线程写入,另一个线程在数据可用时读取。
编辑:对于线程间通信,您可以简单地使用共享变量和条件变量来指示何时生成某些数据(生产者 - 消费者模式)。类似的东西:
// thread 1
while(1)
{
// read packet
// write packet to global variable
// signal thread 2
// wait for confirmation of reading
}
// thread 2
while(1)
{
// wait for signal from thread 1
// read from global variable
// signal thread 2 to continue
}
信号部分可以用条件变量实现:pthread_cond_t。