竟然一個禮拜沒有寫網誌,我最近果然是太忙了=__=
這篇筆記也是拖了超過一個禮拜
原因是這次的課程內容越來越難,也越來越聽不懂
不知道該寫什麼才好...

接續第十一章的Process

‧pipeopen非最好方式,建議用dup

‧Makefile預設的編譯指令為cc
在Makefile中加一行CC = gcc可改用gcc編譯,聽說效果會比較好

12-01.gif

‧system1、pexec老師上次已經講過了,不再重寫一遍

‧fork1
老師小改了裡面的程式碼為fork1a.c
多了顯示pid跟ppid數值
至於這有什麼用,老實說我忘了╮( ̄▽ ̄")╭

12-02.gif

‧第二次作業可用exec,效果是運行某個Process並且不再返回
可輸入man exec查看關於他的說明

excelp的p代表path
excelv的v代表vector

12-03.gif

‧pexec
因為不再返回,原本最後應該顯示done字樣沒有出來

12-04.gif

如果把execlp改成execl,done就會出來了
因為那一行錯誤了......

12-05.gif

老師將pexec修改,存成pexec1.c
分別是各種不同的execl的結果,請自行切換註解觀看
如下圖就是錯誤的畫面

12-06.gif

想要顯示錯誤訊息的話,先#include <errno.h>
然後用變數errno顯示錯誤代碼,strerror(errno)顯示錯誤訊息

‧想知道某個系統指令放在哪裡的話,請打which
which ps就會顯示放在/bin/ps

‧wait
講了一堆有的沒的疆屍...

12-07.gif

修改wait.c成wait1.c
在程式中間加上system("ps ef");
狀態會顯示Z+,代表這個process目前是疆屍狀態(Zombine)
等到父親結束,兒子才會真正結束
wait完再顯示ps ef,發現就沒有zombine了

12-08.gif

如果在Xubuntu複製的東西無法貼到Windows的話
先在Windows隨便複製一個東西就可以了

‧upper
./upper < file.txt > aa - 將file.txt變大寫再輸出到aa

‧useupper
此程式其實只是把屬性傳到上面的upper這個程式而已
請自行參考程式碼

12-09.gif

cat - >aaa - 將螢幕上輸入的字輸出到檔案中
-是標準輸入,cat -並不是開啟-這個檔案
而是可以在螢幕上打字輸入內容
缺點是不能回去修改上一行
結束輸入直接按Ctrl+C即可

12-10.gif

===
ch 13 Pipes 管線
===

‧popen1
執行指令uname -a產生pipe,先把buffer清成0
將內容讀到read_fp,再用printf印出來

‧popen2
將寫出去的字串讓b程式去讀,此範例是呼叫od -c

12-11.gif

od - 將檔案用八進位方式顯示
範例:od popen1.c

12-12.gif

od -c popen1.c - 秀字元

12-13.gif

xxd - 跟od類似,只是是以十六進位方式顯示
xxd -g 1 popen1.c - 以多少字元為一組
下圖就是每個字元都分開的樣子

12-14.gif

也可以直接執行odxxd
在螢幕上打完字後,用Ctrl+D結束輸入
他會將你所打的字用八或十六進位顯示結果

第二次作業寫法跟pipe5類似,記得要參考

arrow
arrow
    全站熱搜

    蕭雲 發表在 痞客邦 留言(1) 人氣()