具體來說,我需要調用exec版本來維護當前工作目錄,並將標準發送到與調用exec的程序相同的終端。我也有一個字符串參數向量,我需要通過某種方式傳遞,我想知道如何去做所有這些。我被告知,所有這些都可能與fork和exec完全相同,並且由於谷歌上缺乏可用的文檔,我一直無法讓exec部分工作。如何正確使用Unix exec C(++) - 命令?
我正在尋找哪種可執行方法可以實現此目的,我該如何調用它?
具體來說,我需要調用exec版本來維護當前工作目錄,並將標準發送到與調用exec的程序相同的終端。我也有一個字符串參數向量,我需要通過某種方式傳遞,我想知道如何去做所有這些。我被告知,所有這些都可能與fork和exec完全相同,並且由於谷歌上缺乏可用的文檔,我一直無法讓exec部分工作。如何正確使用Unix exec C(++) - 命令?
我正在尋找哪種可執行方法可以實現此目的,我該如何調用它?
如果你有一個字符串矢量,那麼你需要將它轉化成的char*
數組並調用execvp
#include <cstdio>
#include <string>
#include <vector>
#include <sys/wait.h>
#include <unistd.h>
int main() {
using namespace std;
vector<string> args;
args.push_back("Hello");
args.push_back("World");
char **argv = new char*[args.size() + 2];
argv[0] = "echo";
argv[args.size() + 1] = NULL;
for(unsigned int c=0; c<args.size(); c++)
argv[c+1] = (char*)args[c].c_str();
switch (fork()) {
case -1:
perror("fork");
return 1;
case 0:
execvp(argv[0], argv);
// execvp only returns on error
perror("execvp");
return 1;
default:
wait(0);
}
return 0;
}
您可能正在尋找execv() or execvp()。
你不一定需要谷歌找到了這一點,你應該有man
命令可用,因此您可以通過man fork
和man exec
(或者可能是man 2 fork
和man 3 exec
)瞭解如何形成這些系統和庫函數的參數。
在Debian和Ubuntu,這些手冊頁都在manpages-dev
包,它可以安裝使用的突觸或:
sudo apt-get install manpages-dev
不要忘了把空在那的argv結束! – Suppressingfire 2009-11-15 23:10:36
不要忘記調用c_str()。 – 2009-11-15 23:14:25
謝謝,我張貼的代碼被填充,而我敲出了一個完整的工作示例。 – 2009-11-15 23:20:04