我有一个C程序,可以计算100之后的下一个素数,我需要使用execlp函数执行该程序。质数程序和execlp函数都是不同的文件,但是在同一目录中。感谢您的帮助,以下是我的execlp函数和C程序代码。我已经尝试过使用execlp运行该程序,但是它似乎不起作用。我已经包含了路径,要运行的程序以及以NULL作为参数。
//Main program, that runs execlp function
int main(int argc, char *argv[]) {
int pid;
int start=0;
pid = fork(); /* fork a child process */
if(pid > 0) { /* parent continues here */
count(start, 'P');
wait(NULL); /* to get printing done before shell prompt */
} else if(pid == 0) { /* child got here */
execlp("/home/student/Documents/FIT2100/PRAC3/", "./primeNum",
NULL); /* execute primeNum program*/
} else { /* there is a problem with fork */
perror("Failed to fork a process\n");
exit(1);
}
}
//Prime number program, filename is called primeNum.c
int main() {
bool isPrime = false;
int counter = 0;
int inputNum;
inputNum = 100;
while(isPrime == false){
inputNum += 1;
for(int i = 1; i <= inputNum; i++){
if(inputNum % i == 0){
counter++;
}
}
if(counter <= 2){
isPrime = true;
}
}
printf("Next prime after 100 is %d\n", inputNum);
}
答案 0 :(得分:0)
execl()
的'path'参数是可执行文件的路径名,而不是包含可执行文件的目录。猜测一下,您可能需要:
execlp("/home/student/Documents/FIT2100/PRAC3/primeNum", "primeNum", (char *)NULL);
第一个参数是程序的绝对路径名;第二个是将作为argv[0]
传递的字符串; NULL
(严格来说应为(char *)NULL
或(char *)0
,以避免#define NULL 0
出现问题,如图所示)标志着参数的结尾。如果愿意,您可以使用"pink elephant"
作为argv[0]
的值。
相对路径名是完全可以接受的;如果open()
调用将使用该名称找到可执行文件,则可以与execl()
一起使用。