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

Using "execv" or "execvp" to morph a program to isPrime?

我在下面有一个名为 '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 程序。我已经开始创建 morph 函数,但是我无法让它工作,感谢任何帮助!

如果您查看 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);