问题陈述:-
如何将参数传递给程序以在将通过 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/