尝试用sshpass解决问题(二)

为什么每次遇到问题都那么头疼呢?

继续前篇的说,把sshpass的所有代码拷贝到了项目中,用ipad mini和4s做测试,从ipad mini上往4s里拷贝数据,因为不能从控制台输入,所以手动输入测试命令:

char* argvv[] = {"sshpass", "-p", "alpine", "scp",  "/User/wltest/1.txt", "root@IP:/User/wltest/",0};

运行到在子进程里执行“scp。。。”命令时,会几行错误“operation not permitted”。。。

execvp(“scp”, argv );

注意:子进程里的代码是没有办法跟踪调试的,只有在控制台输出端才能看到,因为这句代码:

perror("sshpass: Failed to run command");

该问题我通过两个设备来回测试都存在。

换一种思路,直接开一个fork,然后执行sshpass的程序,就是

execvp(“sshpass”, “sshpass -p 。。。。。”);

终于看到曙光了,从ipad mini往4s里执行,成功拷贝文件,但从4s里往ipad mini里拷贝失败。

再接着找原因,在执行到fork()时返回值是-1,同样用

perror("。。。。。");查看原因,

错误原因是“operation not permitted”


在网上查找资料,都说是因为设备没有越狱造成的,但我可以很肯定的说,这个肯定越狱了,呜呜呜呜。。。为什么呢?

这两天都在纠结这个问题,现在思路在权限上,但查看了两个设备下的app的权限“ls -l”都是:

-rwxr-xr-x 1 mobile mobile 69344 Sep 17 15:58 iOSTest*

执行Fork应该没有什么问题,查了下资料,该程序都是在/var/mobile/Applications/。。。下运行,而这个目录的用户一般都是mobile,全限比较小,是这个吗?

通过测试发现一些比较有意思的现象:

在虚拟机上通过端口转发然后ssh来连接两个设备,连接上4s后进入测试程序的App目录运行“./iOSTest*",会是等待状态,一片空白,这时你再点击设备上iOSTest应用图标,这时你的虚拟机上的控制台会返回以下信息:

2014-09-17 15:52:07.097 iOSTest[1997:707] /var/root/Documents

2014-09-17 15:52:07.100 iOSTest[1997:707] this is JailBroken

fork is failed!: Operation not permitted

2014-09-17 15:52:07.819 iOSTest[1997:707] no ok

2014-09-17 15:52:07.898 iOSTest[1997:707] Applications are expected to have a root view controller at the end of application launch

注意:红字标的地方在调试和正常运行该程序的时候都是var/mobile/Applications/。。。

连接上iPad mini时,按照上述方法测试,一运行“./iOSTest*"控制台就返回:

Abort trap: 6

也就是说iPad mini这种是正常状态,因为我fork成功了,但什么也没有做。

难道是目录引起的,好消息是大牛的程序在4S下的别的目录下是可以fork的,为什么呢,怎么解决这个问题呢?


你可能感兴趣的:(尝试用sshpass解决问题(二))