在Jailbroken iPhone上调用system()

时间:2010-11-08 04:15:19

标签: objective-c iphone cocoa-touch std jailbreak

我正在尝试通过C system()函数在越狱iPhone的应用程序中进行调用,但它们似乎没有工作。我知道这是可能的,因为Cydia.app的源代码可以做到,但是当我尝试它时,它什么也没做。

我设置了一个简单的测试,它可以在Mac上正常运行,但在设备上显示空白:

system("cd /bin && ls > /tmp/output.txt");
NSLog([NSString stringWithContentsOfFile:@"/tmp/output.txt" usedEncoding:nil error:nil]);

我正在通过XCode正常安装。我想我可能需要在/ Applications中安装它,但是当我尝试SSH并在/ Applications中安装它时,它会显示在SpringBoard中,但是拒绝启动。

1 个答案:

答案 0 :(得分:0)

system("cd /bin && ls > /tmp/output.txt");

也许你的/ bin只是空的,或者你甚至没有(我不确定iPhone的文件系统是什么样的)。请尝试使用echo foo > /tmp/output.txt之类的内容。

假设/ tmp甚至可写+存在。

NSLog([NSString stringWithContentsOfFile:@"/tmp/output.txt" usedEncoding:nil error:nil]);

不要将随机字符串传递给NSLog。使用格式字符串,即使它只是@"%@",并将字符串对象作为要格式化的项之一传递给它。

此外,您不应将nil传递给其中任何一个输出参数。你可以传递NULL作为编码参数,如果你真的不在乎它是什么编码,但你应该总是传递一个指针来接受一个错误对象,如果没有别的,那么框架可以告诉你为什么这不是工作(这可能是实际的失败点)。