微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

简单的C围绕OpenSSH与Windows上的Cygwin

我在Windows上打包一个程序,希望能够在外部调用OpenSSH。 所以,我需要打包ssh.exe,我需要强制ssh.exe始终使用自定义命令行参数(特别是-F来指定它应该使用的configuration文件调用。 没有办法强制调用程序来做到这一点,没有简单的方法来做到这一点,否则在Windows中(我可以想到 – 无论是符号链接或CMD脚本将无法正常工作),所以我只是要写一个在C中简单的包装来做到这一点。

这是我放在一起的代码

#include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(int argc,char *argv[]) { int ret; char **newv = malloc((argc + 2) * sizeof(*newv)); memmove(newv,argv,sizeof(*newv) * argc); newv[argc] = "-F ssh.conf"; newv[argc+1] = 0; ret = execv("ssh.orig.exe",newv); printf("execv Failed with return value of %i",ret); return ret; }

然后我在Cygwin中使用GCC 4.6.3编译这个代码,它运行时没有错误; 然而,在input和输出方面有一种奇怪的行为。 当你去在控制台input(确认主机的真实性和input密码等),只有部分input出现在控制台上。 例如,如果我input'yes'并按回车键,控制台上只会显示'e',SSH将显示需要input'yes'或'no'的错误。 这样做从Windows命令提示符会导致您的input回到命令propmt,所以当您键入“是”,然后按回车 ,你会得到“是”不被识别为内部或外部命令…“消息就好像input在命令提示符下input一样。 最终,SSH将超时。

所以,我显然在这里错过了一些东西,我假设它与execv工作方式(至less是POSIX Cygwin版本)有关。

从CSV读取数据到屏幕输出

DeleteTimerQueueTimer()访问冲突和/或死锁

将kde应用程序移植到windows

什么,馅饼确实做?

X KeyPress /释放事件捕获,无论窗口焦点

有什么我在这里失踪或有任何替代品? 我想知道如果也许我需要叉它,并redirect到叉(虽然fork()似乎并没有工作,但在Windows上还有其他问题)。 我尝试使用process.h中的_execv,但是我得到的代码正确的代码(也可能与尝试使用gcc有关)。

也有可能有一种非编程的方式来做到这一点,我没有想到,但我所尝试的所有可能性似乎并没有工作。

思考?

木偶在窗户

如何使用fopen()locking文件

EnumDesktopWindows错误:(183)当该文件已经存在时,无法创build文件

LINUX:是否可以通过局域网进行pipe道传输? 如果是这样,这是可取的吗? 还有什么其他的select?

伪terminal中的Ncurses程序

我最终找到了解决这个问题的办法。 我相信还有其他方法可以做到这一点,但这似乎解决了这个问题,并且运作良好。 我用下面的代码替换了execv行:

ret = spawnv(P_WAIT,"ssh.orig.exe",newv);

您必须使用“P_WAIT”,否则父进程将完成并退出,您仍然遇到与以前相同的问题。 这会导致父进程等待,但仍然将输入和输出传输到子进程。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐