2013-03-18 41 views
-2

我要插入文件中使用unix命令如何使用unix命令插入文件?

New_IP=New_IP=strtok(Network_config,delimeter); 
system("sed -i ' i '$New_IP' ' Network_settings.txt"); 
+0

你問的幫助與'sed'命令,或者在C中傳遞參數的幫助'系統()'調用?如果'sed'不是問題,請添加命令行命令,詢問您想要的內容,並詢問「如何從C執行此係統()調用」。或者如果你的問題是創建一個你想要的命令行命令,那麼請問,而不是問一個C問題。 – hyde 2013-03-18 09:23:06

+0

我想插入文件使用sed命令是存儲在New_IP中的值到文件 – Mohammed 2013-03-18 09:26:08

+0

那麼你現在的代碼有什麼問題? – hyde 2013-03-18 09:29:42

回答

0

這是最安全的傳遞這樣的價值觀命令行環境變量,並讓殼展開。這避免了大量的字符串逃避麻煩。因此,也許:

New_IP=strtok(Network_config,delimeter); 
setenv("New_IP", New_IP); 
system("sed -i \" i $New_IP \" Network_settings.txt"); 
/* note backshaled \" in string above are for C compiler */ 

注:如果New_IP不慎包含換行符,上面就不行,因爲sed的希望那些有反斜線,使用sed的i命令時。而且,允許換行符允許輸入有更多的sed命令,這可能會做一些令人討厭的命令,例如sed w命令。所以New_IP應該對sed進行消毒處理,但幸運的是這比殼體的消毒要簡單得多,這可以通過使用env變量來避免。

0

您不能像在其他腳本語言中那樣在C字符串中使用$New_IP

在C你要插入您的變量這種方式,例如

char *command; 

asprintf(command, "sed -i ' i '%s' ' Network_settings.txt", New_IP); 
system(command); 
free(command) // if command is useless in your code then free it 
+0

注意:如果New_IP包含任何空格,並且實際上會成爲安全漏洞,如果New_IP不是100%可信值(假設它包含'「; rm -rf〜#」'),則這將不起作用。 – hyde 2013-03-18 09:37:24