posts - 403, comments - 310, trackbacks - 0, articles - 7
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          模仿命令行shell的簡單程序

          Posted on 2007-08-04 00:20 ZelluX 閱讀(575) 評論(0)  編輯  收藏 所屬分類: C/C++
          APUE上的例程,稍微改了下,在進程開始和結束的時候會分別顯示當前的PID和退出狀態。
          不支持參數
          1. fgets命令從標準輸入讀入命令,當鍵入文件結束字符(通常是Ctrl+D)時進程結束
          2. 以\0替換輸入命令的最后一個字符,即去掉換行符,使得execlp能夠處理
          3. fork函數創建一個新進程,對父進程返回新的子進程的非負PID,對子進程返回0
          4. 在子進程中,調用execlp以執行從標準輸入讀入的命令。fork和exec的組合產生了一個新進程
          5. 新的子進程開始執行后,父進程等待子進程的終止,這一要求由waitpid實現
          6. 執行這個程序后還可以在這個簡易shell中創建新的自身的進程

          #include <sys/types.h>
          #include 
          <sys/wait.h>
          #include 
          "ourhdr.h"

          int main(void)
          {
              
          char    buf[MAXLINE];
              pid_t   pid;
              
          int     status;

              printf(
          "%% ");
              
          while (fgets(buf, MAXLINE, stdin) != NULL)
              {
                  buf [strlen(buf) 
          - 1= 0;

                  
          if ( (pid = fork()) < 0)
                      err_sys(
          "fork error");
                  
          else if (pid == 0)
                  {
                      execlp(buf, buf, (
          char *0);
                      err_ret(
          "couldn't execute: %s", buf);
                      exit(
          127);
                  }

                  printf(
          "*** %d ***\n", status);

                  
          /* parent */
                  
          if ( (pid = waitpid(pid, &status, 0)) < 0)
                      err_sys(
          "waitpid error");

                  printf(
          "*** %d ***\n", pid);
                  printf(
          "%% ");
              }
              exit(
          0);
          }

          主站蜘蛛池模板: 钦州市| 蓬溪县| 海林市| 峨山| 南部县| 德兴市| 阿尔山市| 墨竹工卡县| 门头沟区| 汝阳县| 延吉市| 新龙县| 罗城| 临漳县| 内黄县| 贞丰县| 永德县| 平利县| 盐亭县| 温宿县| 定边县| 大竹县| 文登市| 上思县| 永康市| 淳安县| 墨玉县| 筠连县| 淄博市| 浦江县| 黄浦区| 姚安县| 虎林市| 汉沽区| 阳新县| 景谷| 肃宁县| 新邵县| 布尔津县| 荣昌县| 白河县|