我有一个名为' 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程序。我已经开始创建变形功能但是我无法让它工作,任何帮助都表示赞赏!
答案 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);