2011年12月20日火曜日

システムプログラミング:簡単シェル(execl利用)


forkで子プロセスを生成し、そこでexeclを使ってコマンドを実行する。

#include <stdio.h>
#include <stdlib.h>
#include wait.h>
#include <unistd.h>
int main(){
  char command[256],line[256];
  int st;
  static char prompt[64] = "> ";
  fprintf(stderr,"%s",prompt);
  while(fgets(line,sizeof(line),stdin) != NULL){
    if(sscanf(line,"%s",command) > 0){
      if(fork() == 0){
        if(execl(command,command,NULL) < 0){
          exit(EXIT_FAILURE);
        }
      }
else{
        wait(&st);
      }
    }
    fprintf(stderr,"%s",prompt);
  }
  return EXIT_SUCCESS;
}

atmark@atde3:~/work$ gcc -o nsh nsh.c
atmark@atde3:~/work$ ./nsh
> /bin/ls
lv  lv.c  lv2  lv2.c  nsh  nsh.c  nsh.c~

0 件のコメント:

コメントを投稿