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庫的完整路徑