1. 程式人生 > >Linux知識之啟動外部應用方法

Linux知識之啟動外部應用方法

    一般啟動外部應用的方法有system,exec與popen。它們功能相似但使用上有所差別。

1. system

#include <stdlib.h>
int system(const char *command);

    (1) 此方法簡單易用;

    (2) 但新程序會忽略SIGINT和SIGQUIT訊號;

    (3) 返回值較多,容易與command的返回值混淆。

    (4) 示例:

#include <stdlib.h>

int main(int argc, char *argv[])
{
    system("ls");

    return 0;
}

2. exec族函式

#include <unistd.h>
extern char **environ;
int execl(const char *path, const char *arg, ... /* (char *)NULL */);
int execlp(const char *file, const char *arg, ... /* (char *)NULL */);
int execle(const char *path, const char *arg, ... /* (char *)NULL, char * const envp[] */);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[], char *const envp[]);

    (1) 它會啟用新程序,取代父程序(除呼叫exec失敗外);

    (2) 可以使用父程序的上下文;

    (3) 示例:

#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
    // 執行/bin目錄下的ls, 第二個引數為程式名ls, 最後一個引數為佔位必須NULL
    execl("/bin/ls", "ls", NULL);
    printf("============"); //execl執行成功則不會再執行該語句

    return 0;
}

3. popen管道

#include <stdio.h>
FILE * popen(const char *command, const char *type);

    (1) type為讀寫模式;

    (2) popen呼叫成功返回FILE指標,失敗返回NULL;

    (3) 示例:

#include <stdio.h>

int main(int argc, char *argv[])
{
    FILE *fp = NULL;
    fp = popen("ls", "w");
    if(fp == NULL) {
        return -1;
    }
    pclose(fp);

    return 0;
}