2015-09-27 164 views
0

我的代码如下:打开一个xterm的终端,运行./paramax可执行如何获取xterm中的命令行参数?

#include <unistd.h> 
#include <sys/ipc.h> 

int main(int argc, char* argv[]) 
{ 
execl("/usr/bin/xterm", "/usr/bin/xterm", "-hold", "./paramax", (void*)NULL); 
return 0; 
} 

现在的问题是./paramax我需要给它以执行一个命令行参数。如何继续?

+0

请注意,'execl()'的最后一个参数应该是'(char *)NULL',而不是'(void *)NULL',因为参数都是'char *'。然而,一个程序对于这种错误投票是不可能的。 –

回答

1

运行xterm -e ./paramax arg and more args,直接或通过执行调用。

0

我想你需要停止使用execl()并开始使用execv()代替:

#include <errno.h> 
#include <stdio.h> 
#include <string.h> 
#include <unistd.h> 

int main(int argc, char* argv[]) 
{ 
    char *base_args[] = { "/usr/bin/xterm", "-hold", "./paramax", }; 
    enum { NUM_BASEARGS = sizeof(base_args)/sizeof(base_args[0]) }; 
    char *args[NUM_BASEARGS + argc]; 
    int i; 
    for (i = 0; i < NUM_BASEARGS; i++) 
     args[i] = base_args[i]; 
    for (int j = 1; j < argc; j++) 
     args[i++] = argv[j]; 
    args[i] = 0; 
    execv(args[0], args); 
    fprintf(stderr, "%s: failed to execute %s (%d: %s)\n", 
      argv[0], args[0], errno, strerror(errno)); 
    return 1; 
} 

这种分配的基本参数(基本xterm命令和参数的args VLA(变长数组)的足够的指点),加上这个程序的每个命令行参数(程序名除外),加上最后一个null。然后它将各种参数列表复制到args中,然后运行该程序,如果它未能执行命令并以失败(非成功)状态退出则报告错误。从execv()测试返回值没有意义;如果它返回,则失败,如果成功,则不会返回。

请注意,我假设你的基本execl()命令成功执行xterm,而且xterm成功运行./paramax程序,没有额外的参数。如果这不起作用,则需要使用base_args选项列表,直到它正常工作。但是,当我在包含echo Hello World的shell脚本paramax的Linux(Ubuntu 14.04)上对其进行测试时,我得到了一个xterm,其中显示了Hello World。控制没有返回到我运行它的命令行,直到xterm(取代原来的程序)退出。你可以在execv()代码之前用fork()来解决这个问题,只要你在孩子中做execv()并退出父代。

相关问题