- 利用chmod函數實現自己簡化版chmod命令時所需要注意的問題:利用chmod 函數實現chmod命令修改一個文件權限時需要輸入其權限對應的數字。此時輸入的數字是字符型的(即字符串),需要把它轉換爲八進制整數。首先我們先把這個字符串轉換爲十進制數,可以調用atoi函數,然後再把十進制整數轉換爲八進制整數 。
例如,設置一個文件的訪問權限爲:_wx_wx____
,那麼它對應的八進制數就是330。輸入設置權限字符串330,然後轉換爲十進制整數330,即:把原來的八進制數330擴大爲八進制數512。現將十進制數330轉換爲八進制數330,即再縮小同樣倍數:5*8*8+1*8+2=330(八進制),這樣,就把一個字符串330轉換成八進制330。當然,也可以在宏之間取或運算而不用進制轉換。 - stderr 輸出到屏幕。
perror函數是將輸入的一些信息和【現在的】errno所對應的錯誤一起輸出到標準設備(stderr)。 - memset:作用是在一段內存塊中填充某個給定的值,它是對較大的結構體或數組進行清零操作的一種最快方法。
_ _LINE_ _
是預編譯器內置宏表示行數,注意形式。O_RDONLY ,O_WRONLY, O_RDWR
(只讀,只寫,讀寫)用%d
形式輸出時分別爲0,1,2
;故可以用掩碼O_ACCMODE
(即:3)和fcntl函數返回值進行運算,從而判斷文件打開方式。- 文件鎖設置時,步驟爲:檢查能否設置鎖——設置鎖——釋放鎖。單個進程在同一字節上只能設置一種鎖,新的鎖會取代舊的鎖。鎖的不兼容性是針對多個進程之間的。
- 注意if, if 和if,else if的使用方法。因爲如果第一個if成立,隨着if語句的執行,可能會影響後面if條件的判斷。例如:
/*例1*/
int func()
{
int i=2;
if(i<3){
i=4;
}
if(i>3){
i=2;
}
return i;
}
/*例2*/
int func()
{
int i=2;
if(i<3){
i=4;
}
else if(i>3){
i=2;
}
return i;
}
顯然,兩個例子結果不同 。兩個例子中i>3 和i<3看似都互不相干,但是例1中在執行第一個if語句時已經改變了i的值。