2013-03-28 48 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中直接創建輔助進程的操作都將被安全策略拒絕。

相關問題