exec函數族
1. 執行指定目錄下的程序
#include <unistd.h>
int execl(const char *path, const char *arg, ...);返回值:若出錯,返回-1;若成功,不返回
分析:
- path: 要執行的程序的絕對路徑
- 變參arg: 要執行的程序的需要的參數
- 第一arg:占位
- 后邊的arg: 命令的參數
- 參數寫完之后: NULL
- 一般執行自己寫的程序
?
2. execv函數原型:
?
#include <unistd.h>
int execv(const char *path, char *const argv[]);返回值:若出錯,返回-1;若成功,不返回
參數:
- path = /bin/ps
- char* args[] = {"ps", "aux", NULL};
- execv("/bin/ps", args);
?
3.?執行PATH環境變量能夠搜索到的程序
#include <unistd.h>
int execlp(const char *file, const char *arg, ...);返回值:若出錯,返回-1;若成功,不返回
分析:
- file: 執行的命令的名字
- 第一arg:占位
- 后邊的arg: 命令的參數
- 參數寫完之后: NULL
- 執行系統自帶的程序
-
execlp執行自定義的程序: file參數絕對路徑
?
4. execvp函數原型:
#include <unistd.h>
int execvp(const char *file, char *const argv[]);返回值:若出錯,返回-1;若成功,不返回
?
5.?執行指定路徑, 指定環境變量下的程序
#include <unistd.h>
int execle(const char *path, const char *arg, ..., char *const envp[]);返回值:若出錯,返回-1;若成功,不返回
分析:
- path: 執行的程序的絕對路徑??/home/itcast/a.out
- arg: 執行的的程序的參數
- envp: 用戶自己指定的搜索目錄, 替代PATH
- char* env[] = {"/home/itcast", "/bin", NULL};
?
6. execve函數原型:
#include <unistd.h>
int execve(const char *path, char *const argv[], char *const envp[]);返回值:若出錯,返回-1;若成功,不返回
?
二、程序清單:
1. 測試代碼:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>int main()
{for(int i = 0; i < 8; ++i){printf(" parent i = %d\n", i);}pid_t pid = fork();if(pid == 0) {execlp("ps", "ps", "aux", NULL);perror("execlp");exit(1);}for(int i = 0; i < 3; ++i) {printf("----------- i = %d\n", i);}return 0;
}
輸出結果: