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

时间:2015-04-01 14:32:23

标签: c executable

我有一个名为' 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);            
}

其中包含一个数字,并检查它是否为素数。我们要创建一个名为&#39; isPrime.exe&#39;的可执行文件。我使用&#39; gcc -o isPrime.exe prime.c -lm&#39;一切都很完美。下一步是我被困住的地方,我们要创建一个函数Morph(char * number),它接受一个字符串作为数字,并使用execv或execvp将程序变形为isPrime程序。我已经开始创建变形功能但是我无法让它工作,任何帮助都表示赞赏!

1 个答案:

答案 0 :(得分:1)

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