2012-03-20 337 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()替换你的进程你想要开始的程序;如果失败,你仍然在运行,因此你永远不需要在这种情况下设置退出标志。