所以,我有我想修改我自己的目的簡單嗎?的argv []轉換爲char *
它基本上是運行shell腳本(下面的測試例子),但使用蘋果的安全框架PRIVS一個示例應用程序源(見以下鏈接爲原始來源)。
#!/bin/bash
echo [email protected]
whoami
在該示例代碼我們通過以下內容:
myFlags = kAuthorizationFlagDefaults; // 8
myStatus = AuthorizationExecuteWithPrivileges // 9
(myAuthorizationRef, myToolPath, myFlags, myArguments,
&myCommunicationsPipe);
我已修改命令添加myToolPath作爲第一個參數爲這樣:
// Grab the arguent length
int size = strlen(argv[1]);
// Grab the first argument
char myToolPath[size];
strcpy(myToolPath,argv[1]);
其中工程,這意味着當我運行時
./compiled_priv_tool /tmp/example.sh
它返回「root」而不是我正在使用的用戶。
但現在我希望能夠傳遞參數給這個幫手,並讓他們加入到這個數組 這是示例中的示例代碼
char *myArguments[] = { "-u", NULL };
所以我以前的shell示例可能會輸出什麼像這樣:
./compiled_priv_tool /tmp/example.sh
-u
root
,但我希望能夠動態傳遞儘可能多的參數作爲argv的可以包含到這個腳本後,輸出應該是這樣的
./compiled_priv_tool /tmp/example.sh -u user -f file path -b lah
-u user -f file path -b lah
root
我不需要處理C代碼中的參數,我只是需要將它們直接傳遞給shell腳本(外部命令)。
因此,繼承我的(希望)簡單的問題,如果一個人想採取argv []並將它除了參數0(這是路徑到./compiled_priv)複製到期望的char * myArguments var那麼看什麼像在代碼中一樣。我學習了Objective C,並且從不用C開始,所以這可能很基本,但我嘗試了一個for循環並複製這兩個索引,但它不起作用。是這樣的:
的char * myArguments [] =的argv
就是我想要的,但還是不行,因爲它說無效的初始化,並且即使它看起來我們在年底需要一個NULL該陣列非常像NSTask。我會包括我的for循環,但它不是一個啓動器。
所以我需要argv的內容從1到數組的末尾,並在末尾添加一個NULL,並在原始示例代碼中以與char * myArguments []相同的形式包裝它。如果我對c有更好的理解,它會有所幫助,但同時也會有所幫助?
下面是我與它是否有助於播放源鏈接,
酷,所以我會繼續前進,並刪除這一個安全標籤。 – rook