19-io_文件權限掩碼_動態庫_靜態庫

I/O

* 標準IO:庫 帶緩存 通過流FILE * 操作文件
* 文件IO:系統調用 不帶(內核緩存) 通過文件描述符操作文件
* 文件描述符: !最小未用非負整數 作爲一個索引來操作文件使用
open :
  • flags:必須3選1:O_RDONLY,O_WRONLY,O_RDWR
  • O_APPEND 追加
  • O_CREAT 使用這個參數必須指定mode
  • O_EXCL 檢查文件是否存在,單獨使用文件不存在則報錯“r”;結合O_CREAT使用,文件存在則報錯。
  • O_TRUNC 清空
  • O_NONBLOCK 非阻塞
文件權限掩碼 umask :
  • fopen("1.txt","r");open("1.txt",O_RDONLY|O_EXCL)
  • fopen("1.txt","w+");open("1.txt",O_RDWR|O_CREAT|O_TRUNC,0666)
  • fopen("1.txt","a");open("1.txt",O_WRONLY|O_APPEND|O_CREAT,0666)
* close() ; 關閉文件描述符,不要多次關閉同一個。
* read(fd,void *buf,size); 返回值0表示文件末尾,-1表示錯誤。
* write();同上
* lseek(文件描述符,偏移量,相對位置同fseek);

圓下箭頭一頓號
非凡增減富強針地長    
三乘除,四加減,五移位    
千萬別把魚忘記,它在盛飯的廚子裏    
小燈大燈燈燈不等    
爸餵魚,舅疑惑,裸雞也疑惑    
十三姨,十四父,十五逗,兜到低
 “圓下箭頭一頓號”指的是第15級的運算符。其中圓指的是運算符(),下指的是下標運算符[],
 箭頭指的是指向結構體成員運算符->,頓號指的是結構體成員運算符、    
 “非凡增減富強針地長”指的是第14級的運算符。其中非指的是邏輯運算符!,
 凡指的是按位取反運算符~,增減指的是自增和自減運算符++和--,
 富指的是負號運算符-,強指的是類型轉換運算符(類型),針指的是指針運算符*,
 地指的是地址運算符&,長指的是長度運算符Sizeof    “三乘除,四加減,五移位”
 指的是第13級到第11級的運算符。其中三四五並無實際意義,只是起區分級別而已。
 也可以想象三指的是第13級運算符。乘除指的是乘法運算符*和除法運算符/,
 加減指的是加法運算符+和減法運算符-,移位指的是左移運算符<<和右移運算符>>    
 “千萬別把魚忘記,它在盛飯的廚子裏”指的是求餘運算符%,它位於盛飯的廚子裏,
 即指和乘法運算符、除法運算符在一起。    “小燈大燈燈燈不等” 指的是第10級到第9級的運算符。
 其中小燈大燈指的是關係運算符<<=>和>=,燈燈指的是等於運算符==,
 不等指的是不等於運算符!=    “爸餵魚,舅疑惑,裸雞也疑惑”指的是第8級到第4級的運算符。
 其中,爸餵魚之指的是第8級的按位與運算符&,舅疑惑指的是第7級的按位異或運算符^和
 第6級的按位或運算符||,裸雞也疑惑指的是第5級、第4級的邏輯與運算符&&和邏輯或
 運算符||    “十三姨,十四父,十五逗,兜到低”指的是第3級到第1級的運算符。
 其中,十三姨指的是條件運算符?: (三有雙重含義,即指?:的優先級別是三,
 它的運算符類型也是三目,?難道不是姨即疑惑嗎?),十四父的十四沒有實際意義,
 父指的是賦值運算符=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=和|= ,十五逗指的是
 第1級的運算符,兜到低指的是15級運算符以,結束。

* stat 獲得文件信息 完成ls -l的功能

opendir

readdir

getpwuid

getgrgid

動態庫/共享庫 :

  • lib庫名.so.版本號
  • 靜態庫
    • lib庫名.a
  • 區別
    • 載入時刻 目標代碼大小
  • 動態庫 運行時載入 相對小一些
  • 靜態庫 鏈接時載入 相對大一些

  • 生成動態庫

    1.gcc -c -fpic(位置無關碼) 庫.c -o 庫.o

    2.gcc -shared 庫.o -o lib庫名.so

  • 使用:拷貝動態庫到/lib或者/usr/lib下
  • gcc xxx.c -l庫名

  • 生成靜態庫

    1.gcc -c 庫.c

    2.ar -cr lib庫名.a 庫.o

  • 使用:可以和動態庫一樣使用

  • 也可gcc xxx.c -l庫名 -L庫的完整路徑
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章