Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在同一组中的用户之间共享POSIX消息队列_C_Linux_Posix_Share_Message Queue - Fatal编程技术网

C 在同一组中的用户之间共享POSIX消息队列

C 在同一组中的用户之间共享POSIX消息队列,c,linux,posix,share,message-queue,C,Linux,Posix,Share,Message Queue,我试图用一个用户(名为“usuario-prueba”)打开并创建一个POSIX消息队列,以便向队列发送消息,然后用另一个用户(名为“usuario-prueba”)打开并接收消息。两个用户都属于同一组,但是似乎不可能与第二个用户一起打开队列(我收到“permission denied”消息) 以下是一些输出: usuario-prueba@myhost:~$ id uid=1001(usuario-prueba) gid=1002(usuario-prueba) grupos=1002(usu

我试图用一个用户(名为“usuario-prueba”)打开并创建一个POSIX消息队列,以便向队列发送消息,然后用另一个用户(名为“usuario-prueba”)打开并接收消息。两个用户都属于同一组,但是似乎不可能与第二个用户一起打开队列(我收到“permission denied”消息)

以下是一些输出:

usuario-prueba@myhost:~$ id
uid=1001(usuario-prueba) gid=1002(usuario-prueba) grupos=1002(usuario-prueba),1001(pruebas-mqueue)

usuario-prueba2@myhost:~$ id
uid=1002(usuario-prueba2) gid=1003(usuario-prueba2) grupos=1003(usuario-prueba2),1001(pruebas-mqueue)
正如您所看到的,正如我前面所说,两个用户都属于同一个组(pruebas MQUE)

我正在使用以下命令创建和打开队列:

flags = O_RDWR | O_CREAT
mode  = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH

怎么了?

1001(pruebas MQUE)中的消息队列是哪个组?你有没有做过像newgroup这样的活动?如果新创建的共享组处于活动状态,是否需要重新记录用户?如果我将发送用户的gid更改为与“pruebas MQUE”(共享组)相同的gid,则它会正常工作。我认为这将是足够的属于该组,但它也必须有相同的gid。感谢您的提示。对于文件,您可以使用BSD语义或从目录继承的s+g(这非常方便)将它们设置为组。我不知道Linux下/dev/mqueue中的目录是否代表组信息,也不知道chgrp操作是否适用于决定访问权限。在实现SysV共享内存或BSD TCP/IP网络时,UNIX并没有坚持“一切都是文件”,这真是一个遗憾。Linux的方向是使用这些特殊的系统文件系统来生成更多的东西文件。我尝试过更改队列的文件权限(使用mount-tmqueue装载的文件),使其具有写入权限,实际上它也可以工作。我不知道为什么关于这个问题的信息如此模糊,但我终于找到了解决办法。非常感谢你的帮助。酷!“一切都是一个文件”的概念非常强大和普遍,我从未接触过MQUE,但我可以从分析的情况中猜出问题的解决方案。有时候,很难想到一些简单的事情,比如MQUE上的文件perm。我不确定它是否“模糊”,我猜是因为我通过阅读采访/讨论了解了莱纳斯的哲学。通过阅读手册页,我看到有文件-