如何使用execl()函数来执行C程序?
How to use the execl() function to execute a C program?
我有一个计算 100 之后的下一个素数的 C 程序,我需要使用 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);
}
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()
.
一起使用
我有一个计算 100 之后的下一个素数的 C 程序,我需要使用 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);
}
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()
.