gpt4 book ai didi

c - 使用 "execv"或 "execvp"将程序变形为 isPrime?

转载 作者:行者123 更新时间:2023-11-30 15:21:59 24 4
gpt4 key购买 nike

我有一个名为“prime.c”的程序,如下:

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

int isPrime(int number);
void Morph(char *number);

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

int number;

if (argc < 2) {
printf("Returning 2");
return(2);
}
else number = atoi(argv[1]);
if (isPrime(number)) {
exit(1);
}
exit(0);
}


/*
Purpose: check if the input number is a prime number
input:
number - the number to be checked

return:
0 - if the number is not a prime number
1 - if the number is a prime number
*/
int isPrime(int number)
{
int i;
for(i = 2; i*i < number; i++) {
usleep(100);
if (number % i == 0) {
printf("%d is not a prime number!",number);
return(0);
}
}
printf("%d is a prime number!",number);
return(1);
}

void Morph(char *number)
{
execvp(isPrime.exe,number);
}

它接收一个数字并检查它是否是质数。我们要创建一个名为“isPrime.exe”的可执行文件,我使用“gcc -o isPrime.exe prime.c -lm”执行此操作,一切正常。下一步是我陷入困境的地方,我们将创建一个函数 Morph(char *number),它接受一个字符串作为数字,并使用 execv 或 execvp 将程序变形为 isPrime 程序。我已经开始创建变形函数,但是我无法让它工作,感谢任何帮助!

最佳答案

如果你看the reference你会看到例如execvp 函数将字符串作为第一个参数,将 argv 样式数组作为第二个参数。

第一个参数是要运行的可执行文件的路径(相对于当前进程的当前工作目录,或绝对路径)。第二个参数将成为新程序中的 argv 参数。

假设您的 isPrime.exe 与当前程序位于同一目录中,那么您可以这样调用它:

char *primeArgv[] = {
"isPrime.exe", // First argument is the name of the program
number, // The actual first argument
NULL, // Array must be `NULL` terminated
};

execvp("isPrime.exe", primeArgv);

关于c - 使用 "execv"或 "execvp"将程序变形为 isPrime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29393583/

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