2012-09-28 34 views
2

我想通過以下方法獲取dd的輸出。 這個想法是以編程方式捕獲任何dd發送到「的」。使用dd(Android)將文件打印到進程stdout中

//Process p; 
// ... 
p = Runtime.getRuntime().exec(new String[]{"su", "-c", "dd if=/dev/something of=stdout bs=1024"}); 

使用,而不是「DD ...」命令工作預期,但我想這與日合作「貓/ SOME_FILE」。

我應該如何使用stdout,因爲/ dev/stdout在Android中不存在?

這將工作嗎?

你可以假設應用程序具有root權限。

+1

我覺得如果你跳過''''參數,你會把它變成'stdout'。 http://ss64.com/bash/dd.html – zapl

+0

嗯,我認爲這可能只是工作。但我也需要它不要在最後打印它的狀態消息。 Docs提及'status = noxfer',但Android的dd沒有'status'選項。 –

+1

狀態消息爲我打印到'STDERR'。至少在控制檯上追加「2>/dev/null」可以消除消息。 – zapl

回答

2

如果設備是不是太大了,你就能把DD到一個文件,然後貓粗壯的文件...

//Process p; 
// ... 
p = Runtime.getRuntime().exec(new String[]{"su", "-c", "dd if=/dev/something of=/dev/mnt/sdcard/myfile bs=1024"}); 
p = Runtime.getRuntime().exec(new String[]{"cat", "/dev/mnt/sdcard/myfile"}); 

好運

--EDITED--

我剛剛記得,如果你省略了「=」操作數,「dd」命令將寫入標準輸出。 所以你的代碼更改爲:

//Process p; 
// ... 
p = Runtime.getRuntime().exec(new String[]{"su", "-c", "dd if=/dev/something bs=1024"}); 

我測試過它和它的作品。

+0

對不起,該文件很大,我不希望它捕捉到一個文件。 –

+0

請參閱我編輯的部分答案。 – Luis

相關問題