目前我有一个用 C 语言编写的非常简单的 IRC 机器人。当我运行它时,它会建立连接并加入指定的频道。所有连接细节都是硬编码的,但这不是问题。
我想要做的是同时运行一个基本的 shell,这意味着我当前必须从 IRC 通道接收文本并解析它的循环在后台的线程中运行。在这个 shell 中,我希望能够运行可以向 IRC 通道发送消息的命令,或者可以优雅地终止程序(这意味着两个线程都需要关闭)。这个 shell 并不意味着是任何类型的作业控制 shell。
该机器人的主要目的是监视发布的任何 URL 的频道并将它们存储在 SQLite 数据库中。然后,IRC 频道中的人将能够在数据库中搜索特定的 URL。我还希望能够从 shell 执行各种数据库命令,例如搜索,以及手动插入和删除。我提到这一点是因为我假设我需要确保所有数据库访问都是线程安全的。此外,理想情况下,我更希望插入数据库优先于搜索,但这实际上是我的要求列表中的最后一个。
最后,从 IRC 通道接收到的一些命令有可能被派生到它们自己的线程中。这可能是因为他们正在访问数据库,这肯定有可能不是即时的,也可能是因为他们正在调用一个方法来阻塞线程一段时间,以错开将消息传输到通道。
这就是我要问的:
- 我该如何设置这种程序?我需要什么样的结构同时运行两个主线程并可能在两者之间传递消息?
- 访问用于与 IRC 通道通信的套接字是否需要是线程安全的?
- 我应该如何使程序线程安全?互斥量就足够了吗?
如果重要的话,该程序几乎肯定会在 Ubuntu Server 发行版上运行。