gpt4 book ai didi

c - execve() 返回任何命令的错误

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

我必须制作一个自定义 shell 作为学校项目,但我遇到了困难:

int exec_shell(char **argv) //
{
if (execve(argv[0], (char **)argv , NULL)==-1) //if an error occurs
{
printf("Commande invalide : %s\n", argv[0]);
fflush(stdout);//vide le buffer
exit(0);
return -1;
}

return 0;
}

它应该非常简单 - 您以字符串形式输入一个命令,然后 exec 调用该命令。但是,它总是返回错误。

我做错了什么?

这是一个警告:

primitives.c:25:30: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

最佳答案

步骤:1

/* myecho.c */

#include <stdio.h>
#include <stdlib.h>

int
main(int argc, char *argv[])
{
int j;

for (j = 0; j < argc; j++)
printf("argv[%d]: %s\n", j, argv[j]);

exit(EXIT_SUCCESS);
}

编译程序:gcc myecho.c -o myecho

步骤:2

/* execve.c */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int
main(int argc, char *argv[])
{
char *newargv[] = { NULL, "hello", "world", NULL };
char *newenviron[] = { NULL };

if (argc != 2) {
fprintf(stderr, "Usage: %s <file-to-exec>\n", argv[0]);
exit(EXIT_FAILURE);
}

newargv[0] = argv[1];

if (execve(argv[1], newargv , newenviron) == -1) //if an error occurs
{
printf("Commande invalide : %s\n", argv[0]);
fflush(stdout);//vide le buffer
exit(0);
return -1;
}
}

编译程序:gcc execve.c -o execve

step: 3//最后调用

./execve ./myecho

步骤:观察输出。

关于c - execve() 返回任何命令的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44643401/

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