C-Passing参数,用于在新的Xterm窗口中执行程序

时间:2016-01-16 17:27:19

标签: c linux parameter-passing xterm

问题陈述: -

如何将参数传递给程序,以便在将通过execlp调用的新Xterm / Gnome窗口中执行。

有点精心解释: - (矛盾吗?)

考虑以下程序,它将字符串作为参数并显示它

//output.c
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    if(argc<2)
        {
              printf("insufficient parameters\n");
              exit(1);
        }
    printf("%s",argv[1]);
    sleep(10);
    return 0;

}

另一个程序client.c,在执行过程中需要调用output.c并使其显示在新的xterm / gnome-terminal窗口中。

//client.c
int main()
{
    char buf[25]="Test String";//as argument for program to be called
    int pid_child=fork();
    if(pid_child==-1)
            {
                printf("Fork Failed. Exiting");
                exit(1);
            }

    if(pid_child==0)
            {   
            execlp("/usr/bin/xterm","-e","./output",buf,NULL);
            }

    int status=0;
    while(wait(&status)!=-1);
}

这里的争论点是

execlp("/usr/bin/xterm","-e","./output",buf,NULL); //With string `buf` as argument for `output`.

结果: - 不运行

  

错误   -e:显式shell已经是/〜/ cs60 /目录/./ output

     

-e:错误的命令行选项&#34;测试字符串&#34;

execlp("/usr/bin/xterm","-e","./output",NULL);//Without passing variable `buf` 

结果: - a)打开新的Xterm窗口。 b)输出终止,参数不足(如预期的那样)。

该手册页明确指出Xterm:

  
    

-e program [arguments ...]

  
            This option specifies the program (and its command  line  arguments) to be run in the xterm window.

当我从终端(作为脚本)运行它时,它完全正常。但是我怎样才能通过C实现这一目标。

任何帮助都将受到高度赞赏

1 个答案:

答案 0 :(得分:3)

您需要了解execlp()的工作原理。

您需要使用命令名称(“xterm”)向execlp添加第二个参数。

execlp("/usr/bin/xterm", "xterm", "-e", "./output", buf, NULL);

此外,您的输出程序可能需要执行fflush(因此您看到输出),如果execl()失败,您应该退出或采取适当的规避措施。请注意,当命令名称("/usr/bin/xterm")包含任何斜杠时,execlp()的行为与execl()相同。