unix 環境高級編程閱讀筆記1-5章節

Unix 環境高級編程

讀者:注意僅僅是記錄自己閱讀進度,堅持閱讀,沒有深度
源代碼:

http://www.libpix.org/apue/ 第二版

http://www.apuebook.com/code3e.html 第三版

第1章UNIX基礎知識

  1. 文件和目錄 2017年7月20日
  2. 系統調用和庫函數

第2章 UNIX標準話及實現

  1. 最大文件描述符 sysconf

第3章 文件I/O

  1. 引言
  2. 文件描述符 0 1 2
  3. open函數
    O_TRUNC 截短爲0
    文件名和路徑名截短
  4. create函數
  5. close函數
    內核自動關閉
  6. lseek函數
    錯誤-1
    od -c file.hole
  7. read 函數
  8. write
    常見原因:磁盤已滿,超過文件限制
  9. I/O 效率
    Linux ext2 塊長4096
  10. 文件共享
    進程表(記錄項)–文件表描述符(狀態,讀寫、標誌)–v節點(屬性)
    多個進程寫入一個文件
  11. 原子操作
    將多個進程寫入操作合併爲一個步驟。
  12. dup和dup2函數
    複製文件描述符
    另外一種方法fcntl(filedes,F_DUPFD,0)
    與fcntl不同的地方,dup2是原子操作,以及errno不同
  13. sync、fsync和fdatasync函數
    保證磁盤上的文件和緩衝區高速緩存內容的一致性。
    sync(int files) 修改過,然後沖洗緩衝區,排入寫隊列
  14. fcntl函數
    注意 記錄鎖時是一個指針
    文件描述符標誌
    文件狀態標誌 F_SETFL O_
  15. ioctl函數
    磁盤操作
  16. /dev/fd

第4章 文件和目錄

  1. 引言
  2. stat、fstat和lstat函數
  3. 文件類型
  4. 設置用戶ID和設置組ID
  5. 文件訪問權限
  6. 新文件和目錄的所有權
  7. access函數
  8. unmask函數
  9. chmod和fchmod函數
  10. 粘住位
  11. chown、fchown和lchown函數
  12. 文件長度
    du -s file # 查看file空間
    wc -c file #統計字符
    cat file > file.copy # 填滿空洞
  13. 文件截短
    int truncate(const char *pathname, off_t length) ftruncate()
    將截短爲length
  14. 文件系統
    命名該目錄的目錄項和目錄中的.項
  15. link、unlink、remove和rename項
  16. 符號鏈接
  17. symlink和readlink函數
  18. 文件的時間
  19. utime函數
  20. mkdir和rmdir
  21. 讀目錄
  22. chdir、fchdir和getcwd函數
  23. 設備特殊文件
  24. 文件訪問權限
  25. 小結
    stat函數,文件屬性瞭解
  26. 習題
    unix對目錄的深度有限制嗎?
    答:無,但是文件名有PATH_MAX

第5章 標準I/O庫

  1. 引言
    細節:緩衝區分配、優化長度執行I/O
  2. 流和FILE對象
    int fwide(FILE *fp, int mode) mode 參數設定,寬定向(多字節)返回值爲正,字節定向爲負值,0表示未定向
  3. 標準輸入、標準輸出、標準錯誤
    進程預定的三個流。
  4. 緩衝
    • 全緩衝
      malloc flush
    • 行緩衝
      遇到換行符時
      行緩衝長度固定
      沖洗所有行緩衝流
    • 不帶緩衝流
      stderr fputs
    • 更改緩衝類型
      void setbuf(FILE *restrict fp, char *restrict buf);
      void setvbuf(FILE *restrict fp, char *restrict buf, int mode, size_t size);
    • 沖洗流
      int fflush(FILE *fp) 是該流所有未寫的數據都被傳送至內核
  5. 打開流
  6. 讀和寫流
    • 非格式化I/O
      1. 一次一個字符
      2. 每次一行 fgets和fputs
      3. 直接I/O fread和fwrite
    • 輸入函數
  7. 每次一行I/O
    • fgets gets
    • fputs puts
  8. 標準I/O的效率
  9. 二進制I/O
    #include<stdio.h>
    size_t fread(void *restrict ptr,size_t size, size_t nobj, FILE *restrict fp);
    size_t fread(void *restrict ptr,size_t size, size_t nobj, FILE *restrict fp);

  10. 定位流

    1. ftell 和fseek
    2. ftello 和 fseeko
    3. fgetpos 和 fsetpos
  11. 格式化I/O
    • 格式化輸出
      printf
      fprintf
      sprintf在該數組的尾端自動加一個null字節,但該字節不包括在返回值中。
      snprintf 顯示指定緩衝區大小,避免緩衝溢出。
      vprintf(,va_list arg) 可變參數
    • 格式化輸出
      scanf() 同printf…
  12. 實現細節
    調用dup或者fcntl 函數將要調用int fileno(FILE *fp)
  13. 臨時文件
    char *tmpname(char *ptr) #創建一個與現有文件名不相同的現有路徑名
    FILE *tmpfile(void) #臨時文件庫,關閉該文件或程序自動刪除
  14. 標準I/O的替代軟件
    • 效率不高 兩次複製
      內核與標準I/O之間
      標準I/O與用戶程序的行緩衝之間
      mmap—映射文件
  15. 小結
    I/O緩衝技術
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章