繁体   English   中英

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

[英]How to use the execl() function to execute a C program?

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

}

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM