gpt4 book ai didi

c - 如何将字符串与c中的execvp匹配

转载 作者:行者123 更新时间:2023-12-02 06:59:42 25 4
gpt4 key购买 nike

<分区>

你好,我需要使用 execvp() 运行一个程序,问题是我得到一个 sting 作为参数我似乎无法匹配命令的语法以正常工作这里是代码:

int executeUserCommand(char *command, int runInBackground) {
pid_t pid;
int status;
pid = fork();
if (pid == 0) {
//child process
execvp(command, &command);
exit(1);
} else {
//perent
if (!runInBackground) {
waitpid(pid, &status, 0);
return WEXITSTATUS(status);
}
}
return 0;
}

我正在使用 executeUserCommand("./test 1 2 3", 0)问题是程序正在运行但没有参数..问题是什么以及我如何解决它?

编辑:我添加了两个功能来帮助我进行拆分,但它仍然无法正常工作。

char *getCommand(char *commandAndArguments) {
char command[256];
memset(command,0,MAX_LENGTH_OF_LINE);
sscanf(commandAndArguments,"%s ", command);
//strncpy(command, commandAndArguments, command - commandAndArguments);
return command;
}

void commandToArrguments(char *stringToSplit) {
const char *p = stringToSplit;
int n, len;
int i = 0;
for (n = 0; n < MAX_NUMBER_OF_COMMANDS; n++) {
for (len=0; len < MAX_LENGTH_OF_LINE-1; len++) {
if (p[0] == '\0') {
break;
}
if (p[0] == ' ') {
p += 1;
break;
}

commandArgumnets[n][len] = *p;
p++;
}
commandArgumnets[n][len] = '\0';
}
}

int executeUserCommand(char *command, int runInBackground) {
pid_t pid;
int status;
pid = fork();
char *commandToExecute = getCommand(command);
if (pid == 0) {
//child process
execvp(commandToExecute, commandArgumnets);
exit(1);
} else {
//perent
if (!runInBackground) {
waitpid(pid, &status, 0);
return WEXITSTATUS(status);
}
}
return 0;

commandArgumnets 被定义为全局的,但仍然不工作

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