2010年9月13日 星期一

execve @ Linux Kernel

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

沒有留言:

張貼留言