execve 有點像 include(jump)到 external 的exe(執行檔),等exe執行完後在回到 Internal Process. 到雖然一般都用 *.tcl, *.sh 來連接 exe 比較方便.比較不用 care 到 I/O 的 Interface.既然 Linux 有提供這樣的方式,姑且就來看看摟...
step 1. 先產生個 sample.exe
% gcc -o sample sample.c
ps: ./sample 需要代入參數
ex: ./sample Hello
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char* argv[]){
if(argc!=2){
printf("usage %s <string> \n",argv[0]);
exit(EXIT_FAILURE);
}
printf("%s\n",argv[1]);
exit(EXIT_SUCCESS);
}
step 2. 用 execve 來執行 sample.exe
注意 ./sample 是需要代入參數 , 如 "./sample Hello"
所以帶入 execve() 時的 newargv 參數會長 "./sample Hello", 所以在Array define 中必須要用NULL 隔開.
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[]){
char *newargv[] = { NULL, "Hello", NULL };
char *newenviron[] = { NULL };
if (argc != 2) {
fprintf(stderr, "Usage: %s <file-to-exec>\n", argv[0]);
exit(EXIT_FAILURE);
}
newargv[0] = argv[1];
execve(argv[1], newargv, newenviron);
perror("execve"); /* execve() only returns on error */
exit(EXIT_FAILURE);
}
Refs: Linux Programmer's Manual EXECVE(2)
Execve problem with invoking
execve problem solaris
沒有留言:
張貼留言