System與exec的區別
1、system()和exec()都可以執行進程外的命令,system是在原進程上開闢了一個新的進程,但是exec是用新進程(命令)覆蓋了原有的進程
2、system()和exec()都有能產生返回值,system的返回值並不影響原有進程,但是exec的返回值影響了原進程
popen()
system()函數用起來很容易出錯,返回值太多,而且返回值很容易跟command的返回值混淆。這裏推薦使用popen()函數替代,關於popen()函數的簡單使用也可以通過上面的鏈接查看。
popen()函數較於system()函數的優勢在於使用簡單,popen()函數只返回兩個值:
成功返回子進程的status,使用WIFEXITED相關宏就可以取得command的返回結果;
失敗返回-1,我們可以使用perro()函數或strerror()函數得到有用的錯誤信息。
int res = system("pwd"); 或 if(-1 == system("pwd")) { std::cout<<"error"<<std::endl; }