2013-03-28 50 views
2

我正在尝试为iPhone(或iPad,为此)构建一个应用程序,在该应用程序中我想运行一些shell命令。我希望它工作的iPhone是而不是越狱。iPhone应用程序:获取shell命令输出

system()命令似乎工作在执行shell命令,但输出和输入当然仍然是一个问题。我了解到NSTask可能用于这些类型的事物,并且它存在,但没有记录。 (包括MAC NSTask.h似乎完美地工作)

现在的问题是,这段代码执行时:

NSTask *task; 
task=[[NSTask alloc] init]; 
[email protected]"/usr/bin/ls"; 
task.arguments=[NSArray array]; 
NSPipe *pipe=[NSPipe pipe]; 
task.standardOutput=pipe; 
task.standardError=pipe; 
NSFileHandle *output=pipe.fileHandleForReading; 
pipe=[NSPipe pipe]; 
task.standardInput=pipe; 
[task launch]; 

其中pipe是未来的I/O,它会产生一个错误阅读:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'launch path not accessible' 

我已经尝试了很多可能的路径为unix bin目录,但我无法找到它或我的应用程序没有权限列出文件。 -.-

如何在控制该命令的输入和输出的同时在iPhone上执行shell命令?

+0

如果它没有越狱,那么它将无法正常工作。另外,这可能是列出目录内容的最糟糕的方式。请参阅http://stackoverflow.com/questions/499673/getting-a-list-of-files-in-a-directory-with-a-glob – Petesh

+0

'ls'不是一个例子,它可能是其他任何其他命令。但为什么只有越狱?为什么我不能执行一个shell命令? – tomsmeding

+0

因为在iOS中不允许。涉及直接创建另一个进程的任何事情都将被安全政策拒绝。 – Petesh

回答

5

除非您在越狱手机上运行,​​否则任何尝试在iOS中直接创建辅助进程的操作都将被安全策略拒绝。

相关问题