关于windows下使用LibSSH2向Linux发送多条指令的问题?

solomonlxd 2011-07-15 10:32:05
最近一个项目需要在Windows下让Linux执行几条命令,命令不是固定的,可由用户输入,遇到点问题,请做过的朋友帮帮忙。

执行一条指令可以用libssh2_channel_exec我知道,但是只能执行一条指令,如果几条指令有联系好像libssh2_channel_exec就不符合要求了,比如说先执行 cd /root ,然后 ls

执行多条指令要用libssh2_channel_shell对不对?用libssh2_channel_shell之后每条指令加上"\n"使用libssh2_channel_write发送,然后因该怎么读写我没法理出头绪,在没让输入的时候输入是没有用的,但是我没法知道什么时候可以输入。在网上有人(英文)很模糊的说要用libssh2_poll,我参照ssh2_echo.c的例子写了下面的一个函数:

int GetResult2(LIBSSH2_CHANNEL *channel, char *szBuff, int nLen, int nTimeout=2000)
{
ZeroMemory(szBuff, nLen);
LIBSSH2_POLLFD fds;
ZeroMemory(&fds, sizeof(LIBSSH2_POLLFD));
fds.type = LIBSSH2_POLLFD_CHANNEL;
fds.fd.channel = channel;
fds.events = LIBSSH2_POLLFD_POLLIN | LIBSSH2_POLLFD_POLLOUT;
int nRead = 0;
for(int i=0;i<nTimeout/100;i++)
{
int nResult = libssh2_poll(&fds, 1, 100);
if(nResult < 1)
continue;

if(fds.revents & LIBSSH2_POLLFD_POLLIN)
{
int n;
while((n = libssh2_channel_read(channel, szBuff+nRead, nLen-nRead)) == LIBSSH2_ERROR_EAGAIN)
waitsocket();
nRead += n;
}
if(fds.revents & LIBSSH2_POLLFD_POLLOUT)
{
break;
}
}

return nRead;
}

感觉好像是fds.revents & LIBSSH2_POLLFD_POLLIN的时候有数据可读,就去读出来,fds.revents & LIBSSH2_POLLFD_POLLOUT地时候要求输入,就跳出函数开始输入下一条指令,但是事实并不是这样,前面的指令还没有执行完,还没有让输入就已经LIBSSH2_POLLFD_POLLOUT了,导致后面的指令没法执行。

libssh2_session_set_blocking(session, 0); 设置0或者1都一样

请指教!
...全文
567 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
solomonlxd 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 anranlei 的回复:]

这个代码读出来的是乱码。。。
[/Quote]

你是说我贴的代码么?
anranlei 2011-08-02
  • 打赏
  • 举报
回复
这个代码读出来的是乱码。。。
solomonlxd 2011-07-17
  • 打赏
  • 举报
回复
没有人用过libssh2吗?

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧