gpt4 book ai didi

c - 为什么我在使用 C 语言执行 execvp 时遇到困难?

转载 作者:太空宇宙 更新时间:2023-11-04 02:12:31 27 4
gpt4 key购买 nike

我需要用 C 实现一个基本的 shell。我需要做的一件事是实现一个具有命令的函数并执行它。我的代码:

    pID=fork();

if (pID == 0)
execvp(tmp[0], tmp);
else if (pID > 0)
{
printf("%d", pID);
wait(NULL);
}
else
printf("Failed to create proccess \n");

问题是无论我在 tmp 中输入什么命令,程序都会再次显示提示,除此之外什么都不做。例如,如果我写 gedit(为了打开 gedit — Ubuntu 的一个 ntpad),它不会打开它,或者如果写 ls -a 它没有像 Ubuntu 的终端那样向我显示任何输出。

最佳答案

execvp 应该可以工作。正如其他人提到的那样,您确实需要展示如何填充 tmp。也就是说,我猜这就是错误所在。 tmp 需要是一个空终止数组。

#include <stdio.h>
main( int argc, char * argv[] )
{
int pid = fork;
char * tmp[2];
memset( tmp, 0, sizeof(tmp) );
tmp[0] = argv[0];
if( 0 == pid )
{
if( -1 == execvp( tmp[0], tmp ) )
{
char errmsg[64];
snprintf( errmsg, sizeof(errmsg), "exec '%s' failed", tmp[0] );
perror( errmsg );
}
else if( 0 < pid )
{
printf("[%d] %s\n", pid, tmp[0]);
wait(NULL);
}
else
{
perror("fork failed");
}
}

关于c - 为什么我在使用 C 语言执行 execvp 时遇到困难?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12079962/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com