2013-01-15 47 views
-6

如何讓一個C++程序在Linux中打開另一個程序?它與使用shell命令的Windows相似嗎?Linux C++如何打開一個程序

+2

使用'exec'函數之一。 –

+0

您是否在嘗試將Windows +終端與Linux + C++進行比較? – 2013-01-15 22:10:29

+0

這真的不難搜索。 – chris

回答

0

您可以使用標準庫調用system(),這與Windows Shell命令非常相似。對於更多控制,您可以使用exec()及其變體。

3

有一個標準的C函數,system()它運行一個命令並等待它完成。

有一個標準的POSIX函數popen(),它在新進程中運行命令並返回連接到新進程的管道。管道通常是單向的,它可以讀取或寫入(一些平臺,如BSD允許雙向管道)

或者你可以手動執行,通過使用POSIX功能fork()來分叉一個新的進程,然後其中一個exec()家族用不同的程序替換過程映像。

我認爲最簡單的方法是使用我的Pstreams庫。這將在新進程中運行命令,並使用iostream兼容接口將管道連接到其任何stdinstdoutstderr。這比fork & exec(但要簡單得多),但比popen更具靈活性和安全性。

0

通常你第一次使用功能啓動另一個過程,然後EXEC交換新的進程正在運行的是希望PROGRAMM(即PROGRAMM開始antother程序)與你想開始的那個。代碼看起來大致如下:

pid_t pid = fork(); 
switch(pid) { 
    case 0: // we are the child process 
     exec(name of exectuable); //exact signautre differs 
     break; 
    case -1: //An error ocurred 
     std::cout << "error\n"; 
} 

叉克隆您正在運行的進程。他們是完全相同的,他們甚至運行相同的程序。唯一的區別是返回的PID。調用過程獲取孩子的pid,孩子得到零。開關狀態決定了這些情況。 Exec取代了另一個程序正在運行的程序。從我記得的地方來看,它只保留文件描述符。 Exec在參數和搜索路徑方面有幾個varaiants,請在man page中查找它們。

相關問題