如何使用execl()函数执行C程序?

时间:2019-09-16 06:49:40

标签: c linux unix exec

我有一个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);

}

1 个答案:

答案 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()一起使用。