C-传递参数以在新的 Xterm 窗口中执行程序

标签 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 中-终端窗口。

//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`.

结果:-不运行

Error -e: Explicit shell already was /~/cs60/directory/./output

-e: bad command line option "Test String"

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

结果:- a) 新的 Xterm 窗口打开。 b) 输出以 Insufficient parameters 终止(正如预期的那样)。

Xterm 的联机帮助页明确指出:

-e program [ arguments ... ]

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

当我从终端(作为脚本)运行它时,它工作得很好。但是我怎样才能通过 C 实现这一点。

任何帮助将不胜感激

最佳答案

您需要了解如何 execlp()有效。

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

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

此外,您的输出程序可能想要执行 fflush(因此您会看到输出),如果 execl(),您应该退出或以其他方式采取适当的规避操作失败。请注意,当命令名称 ("/usr/bin/xterm") 包含任何斜杠时,execlp() 的行为与 execl().

关于C-传递参数以在新的 Xterm 窗口中执行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34829884/

相关文章:

c - 指向返回多维数组的函数的函数指针

c - 使用 Visual Stuido 处理 C 语言中的 scanf_s()、print_r() 和 char 的问题

linux - 无法设置 AP,我不知道官方 Raspberry Pi 无线加密狗的驱动程序名称

linux - 如何运行 iostat/vmstat/top/sar 直到所有后台进程完成?

python - 将多个参数传递给python中的函数的方法

c - 将多个参数传递到一个 void 指针参数的好方法? (C)

c++ - C++ 中的调用时间改变了我的 struct tm

c - 使用 malloc 和 calloc 生成矩阵导致混淆行为

linux - 如何将时间 gcc 输出重定向到文件?

jsf-2 - :param to composite components