python中的popen如何用c++实现

python中的popen如何用c++实现,第1张

先调用pipe,再调用fork,把子进程的标准输入和输出调用dup,到pipe的两个端,

通过pipe读取子进程的输出,并且可以:

通过pipe给子进程输入(可选)

调用wait等待子进程结束。

大体就这个意思

你要知道system的返回值,并非H1EXE的返回值。

在DOS下,

system()只是做一个调用其他程序的工作,只要调用成功就返回0,不成功就返回-1。

它不能得到被调用的程序的执行结果。

要得到其他程序的执行的结果,要用spawn()这个家族的函数。

如果在linux下面

如果你想得到那个返回值可以调用WEXITSTATUS(status),其中status是system函数的返回值。

如果你非常想获取他的返回值,就使用popen函数。它返回一个FILE,就好像读写文件一样 *** 作它就是了,不需要另外写文件读文件。

1、这种功能用脚本实现最好

2、最好弄成dsa公钥验证方式,也就是ssh无密码登录

3、ssh的密码输入是绑定到TTY而不是stdin的,所以无法重定向(到管道)

31、如果想通过程序输入ssh密码,那么就要模拟TTY,或者让ssh认为你的输入是直接来自TTY

32、或者,你干脆自己实现个最简单的ssh协议吧

33、程序模拟TTY,一般会直接采用expact库,这在脚本里面很方便,但由于C处理字符串过于笨拙……

4、登录之后,和ssh交互需要通过管道进行。用写来模拟控制台键入字符,用读来取命令输出数据;至于命令返回值……读 echo $ 的输出吧

5、如果命令本身也有输入/输出提示,比如 rm xxx 会让你按y什么的,那么你必须自己捕捉到这个提示,然后往管道写一个"Y\n"进去。所以……也许还是expect方便。

6、你可以搞一个脚本,在脚本里用expect完成登录动作,然后下interact命令进入交互模式;然后在C里面用popen()执行这个脚本,这样就可以避开登录问题,但仍然要处理命令行交互问题(也就是回答are you sure之类的问题,当然这可以通过为命令传入-y之类参数来绕开,不过有些命令未必支持)。

system(执行shell命令)相关函数fork,execve,waitpid,popen表头文件#include定义函数intsystem(constcharstring);函数说明system()会调用fork()产生子进程,由子进程来调用/bin/sh-cstring来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD信号会被暂时搁置,SIGINT和SIGQUIT信号则会被忽略。返回值如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值。如果system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为system()调用/bin/sh失败所返回的127,因此最好能再检查errno来确认执行成功。附加说明在编写具有SUID/SGID权限的程序时请勿使用system(),system()会继承环境变量,通过环境变量可能会造成系统安全的问题。范例#includemain(){system(“ls-al/etc/passwd/etc/shadow”);}执行-rw-r--r--1rootroot705Sep313:52/etc/passwd-r---------1rootroot572Sep215:34/etc/shadow

以上就是关于python中的popen如何用c++实现全部的内容,包括:python中的popen如何用c++实现、C语言 如何调用另一个程序的计算结果急!!!!!、如何在C语言程序中使用SSH等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9739743.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存