gpt4 book ai didi

c - mq_open() - 打开的文件太多

转载 作者:太空狗 更新时间:2023-10-29 11:32:47 27 4
gpt4 key购买 nike

我正在尝试编写一个客户端和服务器,它们将使用 POSIX 消息队列交换数据。我试图通过查看我在互联网上看到的示例和类(class)的文档来做到这一点。但是,我被困住了。当我运行它时,出现“打开的文件太多”错误。这是我的代码:

客户:

int main( int argc, char *argv[]) {

//Open its queue, which is client queue
char cq_name[10];
sprintf( cq_name, "/cq%i", getpid());
printf( "Client Queue name: %s\n", cq_name);

mqd_t cq_id = mq_open( cq_name, O_CREAT | O_RDWR, 0666, NULL);
if( cq_id == -1) {

printf( "Error in cq: %s\n", strerror( errno));
return -1;
}

printf( "Name: %s\n", argv[1]);

//Connect to the server message queue
mqd_t sq_id = mq_open( argv[1], O_RDWR);

if( sq_id == -1) {

printf( "Error in sq: %s\n", strerror( errno));
return -1;
}

...

服务器:

int main( int argc, char *argv[]) {

//The server message queue
struct mq_attr attr;
attr.mq_flags = 0;
attr.mq_curmsgs = 0;

printf( "Name: %s\n", argv[1]);

mqd_t id = mq_open( argv[1], O_CREAT | O_RDWR, 0666, NULL);

//Check the message queue
if( id == -1) {

printf( "Error: %s\n", strerror(errno));
}

printf( "Check Point 1 - %i\n", id);

...

你能帮我找出问题所在吗?提前致谢..

最佳答案

这周我遇到了这个问题 - 我最多只能打开 10 个 mqs。

我的意图是使用 mqs 将事件通知传递给线程。在我的例子中,event_id 只是一个 int。通过在调用 mq_open 时指定非默认属性,如下所示:

char mq_name[128];
sprintf(mq_name, "%s.%d", MQ_NAME, nnid);

struct mq_attr attrib;
attrib.mq_flags = 0;
attrib.mq_maxmsg = 4;
attrib.mq_msgsize = sizeof(int);
attrib.mq_curmsgs = 0;

retval = mq = mq_open(mq_name, O_RDWR | O_CREAT | O_EXCL, 0644, &attrib);

在 mq_open() 失败之前,我现在最多可以打开 256 个 mq。

关于c - mq_open() - 打开的文件太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22081382/

27 4 0
文章推荐: css - Rstudio 0.98.1028 仅将背景图像添加到标题幻灯片
文章推荐: html - 如何在 css 中创建叠加层?
文章推荐: linux - 如何用 sed 替换 1 个文件中的所有匹配项?
文章推荐: html - 将
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com