下禮拜就要交Linux程設的第一次作業了
不過我到現在連一個字都沒還寫="=
最近學校的事情又跟山一樣多,網誌最近也沒時間更新
這篇筆記竟然又拖了一個禮拜
時間真的是不夠用啊...
《umask》
可以設定檔案的預設權限
每個檔案用ls -l看時,前面會有一個權限(像這樣 -rw-rw-rw-)
譬如訪客可不可以執行讀寫動作,這些是用umask控制的
umask影響一個檔案的r(read)、w(write)、x(execute)這三種權限
rwx分別代表4,2,1分
umask預設是777,777-umask=檔案權限
比如說要設定該檔禁止寫入,那就減掉2分
若設定該檔禁止寫入跟執行,那就減掉2+1=3分
以下是範例
umask - 顯示目前預設權限
ll > u0022 - 將ls結果傳到一個新檔案u0022
umask 0002 - 將權限更改成0002
ll > u0002
umask
umask 0066
ll > u0066
umask
最後輸入ll u*看產生的檔案,會發現三個檔案的權限皆不同
另外,使用chmod一樣可以修改權限
詳細內容可以參考鳥哥的私房菜的介紹
《Makefile》
先將第三章的範例copy一份
輸入cp copy_block.c copy2.c
再輸入make全部編譯,他卻不會幫你編譯新產生的copy2.c
這是因為make這個語法必須跟目錄底下的Makefile檔案作配合
請先用gedit開啟Makefile,然後找到COPY=那一行
在後面加上copy2這個字串
重新試一次make就可以自動編譯了
《其他指令》
‧close - 關閉檔案
‧ioctl - 關閉周邊功能,比方說關閉馬達或螢幕
‧dd if=/dev/zero of=file.in bs=1024 count=20k
產生一個20MB的空白檔案
至於為什麼這樣是20MB...
bs=block、1024=1k、count=20k,故1k*20k=20M
dd原本是把檔案拷貝到另一檔案(跟cp很像)
但是他可以在途中修改檔案屬性什麼的,比較強
dd還可以做整個硬碟的備份
‧lstat - 取得檔案資料
‧open跟fopen差異 - 上網找
‧輸入cat -n /etc/passwd
看到下面會有一行joe:x:1000:1000(joe是登入的名字)
前面的1000為UserID,後面的1000為GroupID
至於這有什麼用我也不清楚=__="
‧MSDOS的指令type跟Linux的cat功能是相同的
都是顯示檔案內容
《copy的差異》
前面跟上禮拜的內容相同
time ./copy_system - 超慢
time ./copy_block - 很快
若將copy2.c的1024修改成4096再重新執行一次
速度會更快!
copy_system很慢的原因:要做system call
舉例來說,假設現在某人要為班上每人買一瓶飲料
一次只買一瓶飲料的話要跑五十趟
不如帶個袋子一次把五十瓶飲料裝起來
《lseek讓檔案不用從頭讀》
我們一般讀檔都是從頭讀到尾
其實使用lseek,可以從檔案的途中開始讀取
SEEK_SET 從檔案開始
SEKK_CUR 從目前位置開始
SEEK_END 從最後面開始
先產生一個檔案seq.txt,內容如下
000000000
111111111
222222222
333333333
444444444
555555555
666666666
777777777
888888888
999999999
再新增lseek.c,輸入以下程式碼
(因內容較長,為節省版面請直接下載)
(若使用vim,輸入大寫G可以直接排版)
新增完這兩個檔案後,使用make或gcc -o lseek lseek.c編譯
再用./lseek seq.txt執行
可以發現顯示的位置會被改變
詳細的程式碼內容就請自行研究了
《關於作業printdir.c》
要opendir必須先inlcude兩個東西
請自行參考OPENDIR、CHDIR、lstat、time等等說明
因為這邊大多是論述內容所以抄不了筆記,請自行觀看
printdir.c有一段內容如下
if(strcmp(".",entry->d_name) == 0 ||
strcmp("..",entry->d_name) == 0)
continue;
為什麼要跳過.跟..,是因為每個目錄都會有這兩個隱藏檔
如果執行的話又會跳回上一層,變成無限回圈,所以不要做
printf("%*s%s\n",depth,"",entry->d_name);
那個*是留空,會依照depth的數字空多少格
===
ch 4 Linux的環境
===
第四章主要講到檔案後面接的參數argv跟argc
範例:./args left right The center scu CSIM 12345
猜猜看argc會顯示幾個?
答案是8,因為第0個一定是執行檔的名字 ./args
如果把The center用雙引號括起來就只算一個單字
The center --> "The center"
範例:./args -l -s --list /etc
argc: 5
範例:./args *
這並不是把*給傳進去,而是把該目錄底下的所有檔案名稱給傳進去
我們知道輸入ls [a-e]*代表只顯示a-e開頭的檔案
輸入./args [a-e]*就是將a-e開頭的檔案名稱傳進args
範例:./args -h --help -i -l myarg -k arg2 "third arg" -z
猜猜看底下有幾個argument跟option(前面有-)?
A: 6 option 4 argument
《getopt》重要!
能夠自動取得檔名後面的參數
作業需要用到這種技巧來改變不同的顯示方式
詳情請看範例argopt.c
輸入範例:./argopt -i -l first -r second
若參數為-f,後面要接檔名,否則會告知option needs a value
兩條dash(--)稱為long option
範例:
ls --author 找作者(作者害羞沒有寫)
ls --version 找版本
◎詳情請看第四章116頁
好康道相報
※欲轉貼本站文章者,只要註明出處及網址即可,不需我同意了,謝謝您的配合
※留悄悄話的網友請注意:如果您非痞客邦會員(包含使用FB/Google+帳號),是看不到回覆的喔
※痞客邦會自動將疑似廣告留言隱藏,因此若留言後看不到,可能是被系統自動隱藏了,由於我現在很久才會開一次網誌,有看到時我才會將非廣告留言解開,敬請見諒
※留悄悄話的網友請注意:如果您非痞客邦會員(包含使用FB/Google+帳號),是看不到回覆的喔
※痞客邦會自動將疑似廣告留言隱藏,因此若留言後看不到,可能是被系統自動隱藏了,由於我現在很久才會開一次網誌,有看到時我才會將非廣告留言解開,敬請見諒
- Oct 23 Thu 2008 00:44
Linux程設學習筆記(六)
全站熱搜
留言列表