Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.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++ 使用Qt在自定义位置创建本地套接字_C++_Linux_Qt_Qlocalsocket_Qlocalserver - Fatal编程技术网

C++ 使用Qt在自定义位置创建本地套接字

C++ 使用Qt在自定义位置创建本地套接字,c++,linux,qt,qlocalsocket,qlocalserver,C++,Linux,Qt,Qlocalsocket,Qlocalserver,我正在使用QLocalServer创建一个本地套接字,以便其他进程可以连接到我的Qt应用程序。我的问题是Qt似乎一心想在/tmp/中创建套接字文件,但我更愿意遵循XDG指南,使用XDG\u RUNTIME\u DIR环境变量来确定正确的用户特定套接字位置 如果我使用: QLocalServer socketServer; socketServer.setSocketOptions(QLocalServer::UserAccessOption); socketServer.listen("appn

我正在使用QLocalServer创建一个本地套接字,以便其他进程可以连接到我的Qt应用程序。我的问题是Qt似乎一心想在
/tmp/
中创建套接字文件,但我更愿意遵循XDG指南,使用
XDG\u RUNTIME\u DIR
环境变量来确定正确的用户特定套接字位置

如果我使用:

QLocalServer socketServer;
socketServer.setSocketOptions(QLocalServer::UserAccessOption);
socketServer.listen("appname.socket"); //creates socket file, returns true.
然后在
/tmp/
中创建套接字,但是如果我尝试指定一个绝对或相对路径,那么Qt似乎根本不需要创建套接字

QLocalServer socketServer;
socketServer.setSocketOptions(QLocalServer::UserAccessOption);
socketServer.listen("/tmp/appname.socket"); //returns false, does not create socket.

编辑:仔细检查,设置套接字文件权限的setSocketOptions(QLocalServer::UserAccessOption)阻止我指定套接字路径。注释掉这一行将删除限制。但这肯定不是Qt的预期行为吗?

奇怪。Qt文档特别提到这是可能的:通常您只需传入一个名称,如“foo”,但在Unix上,这也可能是一个路径,如“/tmp/foo”,在Windows上,这可能是一个管道路径,如“\\。\pipe\foo”
socketServer.listen()的返回值是多少?你能举例说明你是如何使用绝对路径还是相对路径的吗?我已经用更多的信息编辑了我的问题。如果您使用setSocketOptions()指定文件权限,似乎Qt只会阻止您指定套接字路径。我很欣赏这项检测工作,尽管我担心现在无法使用调试符号重新编译Qt,而且设置权限似乎并不合适。另一方面,您链接的源文件的第93-100行(以及之后的第120-131行)非常有趣:如果设置了任何访问选项,那么第93行上的if()谓词将返回true,并且Qt生成的路径字符串的行为与未设置访问选项时使用的完全不同。有趣!我还注意到我完全误解了这些标志,不知何故我认为
socketOptions&QLocalServer::WorldAccessOption
总是正确的。遗憾的是,错误字符串是如此毫无帮助。也许
errno
可以为您指明正确的方向。或者,您是否考虑过创建自己的套接字和?