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);
          }

          主站蜘蛛池模板: 云霄县| 杭锦旗| 建昌县| 娄底市| 博罗县| 辽中县| 沁阳市| 明水县| 开江县| 乌鲁木齐县| 海丰县| 景洪市| 大足县| 临城县| 綦江县| 洱源县| 若尔盖县| 彭州市| 南昌县| 石门县| 喀什市| 西昌市| 随州市| 永靖县| 五华县| 新野县| 奉贤区| 东城区| 湖北省| 丰原市| 富宁县| 阜城县| 崇文区| 绩溪县| 迁西县| 长治县| 甘德县| 永济市| 霸州市| 永和县| 建平县|