C++ 如何在C++;?

C++ 如何在C++;?,c++,ibm-mq,C++,Ibm Mq,详细介绍了各种可用的修改,但没有提供一个示例——当然不是针对C++用户 假设我想将MCAUSER从默认值(OS用户名)更改为另一个字符串,函数调用会是什么样子?您在问题中链接到的文档是MQSC命令参考。这是为脚本设计的 还请注意,通道MCAUSER字段的默认值实际上为空,而不是OS用户名。因为它是空的,所以在SVRCONN通道的情况下,当客户端应用程序连接时,从客户端流出的OS用户名将用于运行实例的MCAUSER。您不能使用客户端应用程序中的ALTER CHANNEL更改此行为。我注意到这一点,

详细介绍了各种可用的修改,但没有提供一个示例——当然不是针对C++用户


假设我想将
MCAUSER
从默认值(OS用户名)更改为另一个字符串,函数调用会是什么样子?

您在问题中链接到的文档是MQSC命令参考。这是为脚本设计的

还请注意,通道MCAUSER字段的默认值实际上为空,而不是OS用户名。因为它是空的,所以在SVRCONN通道的情况下,当客户端应用程序连接时,从客户端流出的OS用户名将用于运行实例的MCAUSER。您不能使用客户端应用程序中的ALTER CHANNEL更改此行为。我注意到这一点,以防这就是您考虑使用ALTER CHANNEL的原因

如果您想要编写一个程序来更改IBM MQ对象,例如通道,那么您可能需要使用一个不同但等效的接口,称为可编程命令格式(PCF)。等效的命令参考页为

有一个C++ cf示例示例,查找<强> SRVPCF >P> 简而言之,在psuedo代码中,您可以编写如下程序:-

MQCONN(Qmgr-name)
MQOPEN(Reply-Q)
Build PCF message for MQCMD_CHANGE_CHANNEL
          with MQCACH_CHANNEL_NAME
          with MQIACH_CHANNEL_TYPE
          with MQCACH_MCA_USER_ID
MQPUT1(PCF Message to SYSTEM.ADMIN.COMMAND.QUEUE)
MQGET(wait for reply on Reply-Q to say whether it worked or not)

您在问题中链接到的文档是MQSC命令参考。这是为脚本设计的

还请注意,通道MCAUSER字段的默认值实际上为空,而不是OS用户名。因为它是空的,所以在SVRCONN通道的情况下,当客户端应用程序连接时,从客户端流出的OS用户名将用于运行实例的MCAUSER。您不能使用客户端应用程序中的ALTER CHANNEL更改此行为。我注意到这一点,以防这就是您考虑使用ALTER CHANNEL的原因

如果您想要编写一个程序来更改IBM MQ对象,例如通道,那么您可能需要使用一个不同但等效的接口,称为可编程命令格式(PCF)。等效的命令参考页为

有一个C++ cf示例示例,查找<强> SRVPCF >P> 简而言之,在psuedo代码中,您可以编写如下程序:-

MQCONN(Qmgr-name)
MQOPEN(Reply-Q)
Build PCF message for MQCMD_CHANGE_CHANNEL
          with MQCACH_CHANNEL_NAME
          with MQIACH_CHANNEL_TYPE
          with MQCACH_MCA_USER_ID
MQPUT1(PCF Message to SYSTEM.ADMIN.COMMAND.QUEUE)
MQGET(wait for reply on Reply-Q to say whether it worked or not)


@如果您想在通道上设置MCAUSER参数,MoragHughson给出了一个很好的答案,但是您是否在询问如何以不同于您的应用程序运行的用户身份(操作系统用户名)进行身份验证?如果是这种情况,那么获得一些附加信息会很有帮助,例如队列管理器正在运行的MQ版本,如果是v8.0或更高版本,则显示队列管理器
CONNAUTH
参数所指向的
AUTHINFO
对象。是的,这就是我要查找的。我的客户端正在使用MQ SDK 7.5.0--我不知道服务器在使用什么…能够进行身份验证是队列管理器版本和配置的一个功能。我可以作为一个Unix用户从同一台计算机连接,但不能作为另一个用户。我自己的代码目前没有提供用户名——客户端库必须从操作系统获取用户名。我确信,可以显式设置用户名。@Morag Hughson,你同意Josh的评估吗?@MoragHughson给出了一个很好的答案,如果你想在频道上设置MCAUSER参数,但你可能会问如何作为不同于你的应用程序运行的用户(操作系统用户名)进行身份验证?如果是这种情况,那么获得一些附加信息会很有帮助,例如队列管理器正在运行的MQ版本,如果是v8.0或更高版本,则显示队列管理器
CONNAUTH
参数所指向的
AUTHINFO
对象。是的,这就是我要查找的。我的客户端正在使用MQ SDK 7.5.0--我不知道服务器在使用什么…能够进行身份验证是队列管理器版本和配置的一个功能。我可以作为一个Unix用户从同一台计算机连接,但不能作为另一个用户。我自己的代码目前没有提供用户名——客户端库必须从操作系统获取用户名。我确信,可以显式设置用户名。@Morag Hughson,你同意Josh的评估吗?谢谢,但正如@JoshMC所怀疑的,我想在连接到远程服务器时设置一个不同的用户名。我的客户机--使用MQ SDK 7.5.0时,从同一台主机连接到同一台服务器(作为一个用户,而不是另一个用户)时出现授权错误…@MikhailT.-我也有同样的怀疑,因此在我的回答中有了第二段。你能用符文吗?谢谢。那么,我可以要求我的客户机(7.5.0版)为服务器提供不同的用户名吗,或者这是以前没有人要求的另一个功能吗?我尝试在程序中的队列对象和通道对象上调用
setUserId(“desireduser”)
方法,尽管这两种方法都返回
true
,我仍然收到授权错误。如果您使用操作系统功能runas,这就是您运行程序的方式,就好像它是作为不同的用户运行的一样。像
runas
sudo
这样的事情实际上会将我的有效UID更改为目标-这不仅需要本地授权,而且会产生其他恶劣的影响(防止原始用户进行跟踪/调试等)。客户端代码如何确定其用户名?通过检查环境变量(如
getuid()
geteuid()
)确定?谢谢,但正如@JoshMC怀疑的那样——我正在寻找的是在连接到远程服务器时设置一个不同的用户名。我的客户端——使用MQ SDK 7.5.0从同一台主机连接到同一台服务器时,出现了授权错误,该主机与一个用户相同,但与另一个用户不同……@MikhailT。-我也有同样的怀疑,因此在m中出现了第二段y回答。你能使用runas吗?谢谢。那么,我能要求我的客户(7.5.0版)提供不同的用户吗