2012-03-20 328 views
0

我這部分代碼,指示我的程序(它使屏幕截圖)產生一個命令並退出(關閉)本身。這可以用來在我的程序中使用一個鍵切換到一個程序,例如產生用戶想要使用它的「gimp」或其他圖像編輯器。執行shell命令(c)

case SWITCH_TO: 
    if(arg) { 
     char commandline[ 256 ]; 
     snprintf(commandline, sizeof (commandline), "%s &", arg); 
     system(commandline); 
     cmd->quit = 1; 
    } 
    break; 

例如使用:

program-command SWITCH_TO "gimp" 

將有我的程序調用系統( 「GIMP &」),退出(關閉)本身和運行瘸子。

program-command SWITCH_TO "fotoxx" 

將有我的程序調用系統( 「fotoxx &」),退出(關閉)本身和fotoxx運行。

我希望我的程序檢查命令行是否有效(在$ PATH中找到應用程序),如果沒有,命令「程序命令SWITCH_TO」不運行並且不關閉我的程序(「cmd-> quit = 1」做到這一點,關閉程序)。

感謝

+0

如果你想啓動一個程序,我會去執行exec系列,http://pubs.opengroup.org/onlinepubs/009604499/functions/exec.html 但是,由於該程序應該已經存在,所以我不會執行任何操作或系統。 – 2012-03-20 08:50:08

+0

我不明白你的意思是「我想檢查是否存在需要切換程序的應用程序,如果沒有,程序命令SWITCH_TO」什麼也不做,程序繼續運行「? – 2012-03-20 08:56:13

+0

這可能會幫助你:http://stackoverflow.com/questions/1014822/how-to-know-which-window-has-focus-and-how-to-change-it – 2012-03-20 08:57:53

回答

1

作爲一個初步的解決方案,你可以嘗試添加system()調用的返回值的檢查。

它會在錯誤時爲-1,否則就是您運行程序的返回狀態。當您使用&來獲取子進程時,不確定後者的行爲如何。也不確定是否將孩子從父母分離出來;如果不是,那麼當您退出應用程序時,孩子將終止。

正如其他人所建議的,請查看fork()exec()調用以正確執行此操作。你可以使用一個普通的exec()替換你的進程你想要開始的程序;如果失敗,你仍然在運行,因此你永遠不需要在這種情況下設置退出標誌。