เนื่องจากเพิ่งทำเสร็จเหมือนกัน  เพราะมัวแต่ยุ่งๆ

ไม่พูดมากละกัน ข้อแรกคงทำเสร็จกันไปแล้ว  มาดูข้อสองใหญ่กันดีกว่า

shell ที่ได้มาก็คงจะคงจะรู้กัน(ใช่มั้ย) ว่ามีไว้สำหรับรับ input จาก user มาแล้วเอามาจับแยกเป็น command และ argument รวมทั้งเช็ค & เพื่อเอาไปรันแบบ background อะรีบๆ ไปข้อแก้โค้ดเลยละกัน 

เอาส่วนนี้ไปใส่ไว้ท้ายบรรทัดที่ 98

  args[ct] = NULL; /* just in case the input line was > 80 */  << บรรทัดนี้ล่ะ

 

ใส่ไอ้นี่ลงปาย

 

    /**--------------------ADD THIS SECTION--------------------------**/
    if(strcmp(args[0], "exit") == 0) {  ถ้าได้รับคำสั่ง exit
       printf("System terminate normally\n");
       exit(0);
    }
    int pid = fork();  รับมาก็ fetch ใหม่ซะ
    if(pid==0){  ถ้าเป็น child
          printf("I am about to execute %s command using %s as argument\n",args[0],args[1]);
          execvp(args[0],args); เรียกใช้คำสั่งที่กำหนด 0 คือ command ที่เหลือคือ argument         
          exit(0); จบ child process
    }
    int status;
    if(*background==1 && pid != 0){ มี & และเป็น parent process
       printf("Wating for child process : %d to complete\n",pid);
       waitpid(pid, &status, 0); รอให้ทำงานเสร็จก่อนเน้อ
    }
    printf("Wait Complete. Continue Parent Process"); เสร็จแย้วทำต่อได้
    /**--------------------ADD THIS SECTION--------------------------**/

อะหลักๆก็ประมาณนี้แหละ เฮ่อๆ  ขออภัยที่มาแบบคาบเส้น  พอดีมีธุระด้วยอะไรด้วย แง่มๆ

Comment

Comment:

Tweet