非法参数 Execv() Unix C++
所以我基本上有一个向量参数,每个数组有 1 个参数,我试图将其传递给 unix 中的 execv() 调用。
Execv 接受两个参数,如下所示: int execv(const char *path, char *const argv[]);
将字符串向量转换为指针数组的最佳方法是什么?现在我正在执行以下操作,但是当我用 ps -a -f 运行它时,ps 对我大喊大叫,说非法参数。任何帮助表示赞赏。
vector<string> args = tokenize(cmd);
char * arg[args.size()];
for(int j=0; j<args.size();j++)
{
arg[j] = (char*)args[j].c_str();
}
retval = execv(args[0].c_str(), arg);
。
>ps
PID TTY TIME CMD
635 ttys000 0:00.18 -bash
16106 ttys000 0:00.00 ./test cpp
12590 ttys001 0:00.02 -bash
>ps -a
ps: illegal argument: ?????
So I basically have a vector args with 1 argument per array that I'm trying to pass to an execv() call in unix.
Execv accepts two parameters like so: int execv(const char *path, char *const argv[]);
What's the best way to convert my vector of strings to an array of pointers ? Right now I'm doing the following but when I run it with say, ps -a -f, ps yells at me saying illegal argument. Any help is appreciated.
vector<string> args = tokenize(cmd);
char * arg[args.size()];
for(int j=0; j<args.size();j++)
{
arg[j] = (char*)args[j].c_str();
}
retval = execv(args[0].c_str(), arg);
.
>ps
PID TTY TIME CMD
635 ttys000 0:00.18 -bash
16106 ttys000 0:00.00 ./test cpp
12590 ttys001 0:00.02 -bash
>ps -a
ps: illegal argument: ?????
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我认为你的问题可能是你忽略了在数组末尾放置一个 NULL 。试试这个:
I think your problem may be that you are neglecting to put a NULL at the end of the array. Try this:
execv 函数提供指向空终止字符串的指针数组,这些字符串表示新程序可用的参数列表。按照惯例,第一个参数应该指向与正在执行的文件关联的文件名。指针数组必须以 NULL 指针终止。
The execv functions provide an array of pointers to null-terminated strings that represent the argument list available to the new program. The first argument, by convention, should point to the file name associated with the file being executed. The array of pointers must be terminated by a NULL pointer.