如何使用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().

一起使用