2014-04-16 30 views
1

我想使用system()執行命令。該命令需要一個文件名作爲參數。事情是這樣的:使用C++中的system()在linux下執行命令的轉義序列

void f(string filename){ 
    strnig cmd = "path/to/my/command " + filename; 
    system(cmd.c_str()); 
    ... 
} 

我的問題是什麼逃脫,我可以使用,因此,在文件名收到的字符串將被視爲該文件並沒有更多的只是名稱序列。例如,如果filename = "aname;rm *",我不希望我的命令在"aname"上執行,然後"rm *"被視爲新命令並刪除當前目錄中的所有內容。

此外,我希望我的文件名能夠包含特殊字符,如:',"或空格,而不會影響命令的執行。

如何在C++中執行此操作?

謝謝!

+1

你可能會考慮使用'execv()'而不是'system()'。使用起來比較複雜(但是複雜性可以隱藏在一個函數中),並且你不會得到通配符擴展,但是你也不會得到你不需要的shell行爲。如果你不想要或不需要通配符,我認爲'execv()'會是一條路。 –

回答

1

人系統:

系統()調用/ bin/sh的-c命令

所以使用轉義序列的外殼榮譽執行命令指定的命令。

+0

我的問題是如何在C++中應用轉義序列?有沒有其他解決方案來做到這一點,而不僅僅是解析文件名,然後檢查每個字符,看看它是否是一個特殊字符,然後用「\」作爲前綴? – user3539909

+1

啊,我明白了。恐怕你運氣不好,手動解決方案是唯一的方法。也就是說,如果你堅持使用'系統',部分出於這個原因,使用它是非常不鼓勵的。 'fork/exec'成語更受歡迎。 – user58697

相關問題