Linux知識之啟動外部應用方法
阿新 • • 發佈:2018-12-25
一般啟動外部應用的方法有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;
}