【问题标题】:messenger using message queue and multi thread in single program信使在单个程序中使用消息队列和多线程
【发布时间】:2020-04-06 09:16:07
【问题描述】:

我正在尝试使用消息队列和 pthread 在 Linux 中编写一个消息程序。

我编写的程序解析命令行参数以获取 像

这样的消息队列
user1) ./msg 4321 1234 // snd_key: 4321, rcv_key: 1234 

user2) ./msg 1234 4321 // snd_key: 1234, rcv_key: 4321

然后它会创建两个消息队列:一个用于发送,另一个用于接收消息。 然后它启动一个线程来运行 sender() 传入 &snd_queue 作为 参数和接收者类似。 然后我通过使用 pthread_joing 等待两个子线程完成了程序,然后释放了两个消息队列。

问题是我使用两个终端看不到传入消息。 (我只能看到我输入的消息) 此外,在编写“退出”(应该结束程序)时,它会给出分段错误(核心转储)。

我无法理解我的程序中的错误是什么(它没有任何编译错误)

【问题讨论】:

  • 你应该发布你到目前为止所做的所有事情。
  • @snr 你是什么意思?这就是我到目前为止所做的一切。我已经编写了整个程序。有什么遗漏吗?

标签: c linux pthreads message


【解决方案1】:
pthread_create(&thread_send, NULL, sender(&snd_queue), NULL);
pthread_create(&thread_recv, NULL, receiver(&rcv_queue), NULL);

这两行都是无效的。第一行正在执行函数sender,然后在它退出后,您将使用作为其返回值的函数创建线程。因为sender 的返回值是return 0;,所以你返回的是NULL,所以我希望pthread_create 失败并返回EINVAL。您想传递函数指针以创建线程,并且还想检查返回值。

// error() is a GNU extension from `#include <error.h>

int err = pthread_create(&thread_send, NULL, sender, &snd_queue);
if (err) { error(-1, err, "pthread_create sender failed"); }

err = pthread_create(&thread_recv, NULL, receiver, &rcv_queue);
if (err) { error(-1, err, "pthread_create receiver failed"); }

【讨论】:

    猜你喜欢
    • 2012-12-08
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 2011-03-13
    • 2017-06-10
    • 1970-01-01
    • 2015-06-02
    • 2012-08-05
    相关资源
    最近更新 更多