• 請在 lilina.csie.ncnu.edu.tw 的個人目錄下先建立 up6 的子目錄. (注意大小寫). 在此目錄內置入這次作業所需檔案
    若你在自己電腦上寫作業, 請在上傳後測試一遍, 程式可否執行與是否正確 由 lilina 決定.
  • 作業所需檔案為:
    • Makefile (請參關 make 之相關文件)
    • README
    • 其它 .....
  • 作業說明:
    • 從 argv 建立 binary tree 及 node 間的 pipe. (與第四個作業相同)
    • root 印出自已的 pid.
    • process tree 的每一個 process 只要收到 SIGUSR1, 就會將以其為 root 之 subtree 以 pre-order 印出. 印出內容同第四個作業.
    • process tree 的每一個 process 只要收到 SIGUSR2, 就會將從其至 root 的 path 中的所有 node 印出.
    • 此處之 SIGUSR1 SIGUSR2 各位可自行用其它的 signal 代替.
    • 最好保留一個 signal 作結束用.
    • 每個 process 皆要從 parent 及左, 右兩個 child 同時讀東西. 此處請 用 select().
    • for example
       
      $ ./a.out "1" "0" "10"
      root is 3051 
                               <----  wait for signal 
      I'm 3051, left is 3052, right is 3053    | $ kill -USR1 3051
      I'm 3052, left is 3056, right is 3057    |
      I'm 3056                                 |
      I'm 3057                                 |
      I'm 3053, left is 3054, right is 3055    |
      I'm 3054, left is 3058, right is 3059    |
      I'm 3058                                 |
      I'm 3059                                 |
      I'm 3055                                 |  
                               <----  wait for signal 
      I'm 3054, left is 3058, right is 3059    | $kill -USR1 3054
      I'm 3058                                 |
      I'm 3059 
                               <----  wait for signal 
      I'm 3058                                 | $ kill -USR2 3056
      I'm 3054, left is 3058, right is 3059    |
      I'm 3053, left is 3054, right is 3055    |
      I'm 3051, left is 3052, right is 3053    |
      
      
  • 關於 Makefile 的要求:
    最少要有二個 target:
    default target: 產生所有的執行檔.
    clean: 清除所有的執行檔, *.o 及空檔等, 將目錄回復到只有 source 的狀態.
  • 關於 README 的要求:
    說明你的執行檔名字, 如何執行, 如何測試等.
  • Due day, 2004/05/5 00:05am