使用 "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);
我在下面有一个名为 '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);