gpt4 book ai didi

C execv() 参数问题

转载 作者:太空宇宙 更新时间:2023-11-04 07:36:01 25 4
gpt4 key购买 nike

我无法让 execv() 在我的 C 程序中工作。我怀疑问题出在这一部分,与 char* args[10] 有关。这是片段:

  void mySystem(char *str, int *num_f, int *sig_k)  {
int pid, stat;

if ( fork() == 0) {
char * args[10];
args[0] = str;
args[1] = NULL;

execv(str, &args);
exit(20);

这给出了警告:

systest.c:17: warning: passing argument 2 of âexecvâ from incompatible pointer type

我已经工作了几个小时,似乎尝试了一切。到底是怎么回事?这是所有代码,仅供引用,以防我犯了一个不相关的错误:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>


void mySystem(char *str, int *num_f, int *sig_k) {
int pid, stat;

if ( fork() == 0) {

char * args[10];
args[0] = str;
args[1] = NULL;

execv(str, &args);
exit(20);
}

pid = wait(&stat);
if (WEXITSTATUS(stat) != 0) {
printf("command %s failed (exit code %d)\n", str, WEXITSTATUS(stat));
} else {
printf("command %s success (exit code 0)\n", str);
num_f += 1;
printf("wat %d\n", num_f);
}


} //mySystem



int main() {

char buf[100];
char cmd[100];
int num_fails = 0, sig_kills = 0;

while(fgets(buf, 100, stdin)){
sscanf(buf, "%s", cmd);
if (strcmp(cmd, "quit") == 0) {
printf("ran with %s\n", cmd);
printf("num success = %d\n",num_fails);
exit(0); //returns 0 if equal, 1 if not
}

printf("in main %s\n", cmd);
mySystem(cmd, &num_fails, &sig_kills);
}


return 0;

}

运行时,所有命令都会失败。非常感谢任何帮助。

最佳答案

您正在为 execv 传递一个 char * * * 作为第二个参数,而它接受一个 char **。您不需要 addressof (&) 运算符,因为数组只能通过引用传递,而不能通过值传递。所以你想要:

execv(str, args);

代替

execv(str, &args);

关于C execv() 参数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8943353/

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