gpt4 book ai didi

c++ - 使用 execv 和 shell exec 的问题

转载 作者:太空宇宙 更新时间:2023-11-04 03:50:59 24 4
gpt4 key购买 nike

我正在尝试使用 execv 系统调用从 C++ 启动进程。它工作得很好,直到我在通过调用非交互式 shell 启动进程之前尝试获取用户环境。

我基本上改变的是我的命令(在这个例子中,我使用了一个转储 argv[] 数组的 test.bin 文件)现在的前缀是:/bin/sh -l -c "exec ./testbin testargv1 testargv2"

当我从另一个 shell 启动命令时,我得到:

0: ./testbin1: ./testargv12:./testargv2

同时,当我通过 C++ 程序中的 execve 启动它时,我得到:

0:/bin/sh1:-l2:-c3:执行./testbin testargv1 testargv2

在 c 中,我只需执行以下操作:

char* exe = "/bin/sh";
char** params = { "/bin/sh","-l","-c","exec ./testbin testargv1 testargv2",0 };

execv(exe,params);

就像从 execve 启动时一样,shell 在 fork 自身之前不会重新排列 argv。

有人有任何提示吗?

最佳答案

您确定向我们展示了正确的代码吗?在我看来,你正在做这样的事情:

char* exe = "./testbin";
char** params = { "/bin/sh","-l","-c","exec ./testbin testargv1 testargv2",0 };
execv(exe,params);

通常,您会删除 exe 变量并调用 execv,如下所示:

execv(params[0], params);

关于c++ - 使用 execv 和 shell exec 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26404048/

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