學習筆記:linuxc第六章上

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章