I/O
man 1 命令
man 2 系統調用 內核給用戶留出的接口
man 3 庫 以二進制形式存在的函數集合
文件類型 :
- -普通文件 ( 二進制、ASCII )
- p 管道
- d 目錄
- s 套接字
- l 鏈接
- c 字符設備
- b 塊設備
Input:
- 輸入:數據由內核空間流向用戶空間
流:
- 用來表示數據的方向
- 標準IO中 系統預定義的3個流:
- stdin標準輸入
- stdout標準輸出
- stderr標準錯誤
標準IO緩衝區:
- 全緩存:操作文件,大小4k,刷新fflush
- 行緩存:操作終端(stdin、stdout),大小1024字節,遇到\n刷新
- 不緩存:stderr
* FILE * 流指針 是一個結構體,用來描述文件
* 文件指針:一個long型表示文件的位置
* perror();打印最後一次系統錯誤信息
標準IO操作文件的方式:
- feof用來判斷是否到達文件末尾,到達文件末尾返回非零值。
函數:
fopen :
- fopen(path,mode);成功返回FILE *,錯誤返回NULL並且設置errno。
- mode:
- r:只讀,文件指針指向文件開頭,如果文件不存在則報錯。
- r+:讀寫,文件指針指向文件開頭,如果文件不存在則報錯。
- w:清空,只寫,文件不存在則創建,文件指針指向文件開頭
- a:追加,只寫到末尾,文件不存在則創建,文件指針指向文件末尾。
- a+:追加,讀寫,寫到末尾,文件不存在則創建,初始時讀文件指針指向開頭。
- 操作二進制文件:rb,rb+,ab+
fclose :
- 關閉流
- fclose(FILE *);
- 不要多次關閉同一個流
fprintf :
- 同printf
- (FILE * , 後同printf );
fseek :
- 通過fseek對文件指針進行操作
- fseek(FILE *,offset,whence);
- offset:+表示向後偏,-值表示向前偏
- whence:
- SEEK_SET文件頭
- SEEK_CUR當前位置
- SEEK_END文件末尾
- ftell告知當前指針位置
- rewind偏移指針到頭。
按字符
- fgetc/getc
- fputc/putc
按行
fgets(char *s,size,FILE *)
; 讀取size-1個字符存放到s裏,最後一個位置存放\0 , fgets 遇到 EOF 或者 \n 會停止。fputs(char *s,FILE *)
;
按塊
fread(void *,size,nmemb,FILE *)
; 返回值爲成功讀取的對象的個數,操作ASCII碼文件是儘量使用char *。注意返回值對fwrite操作的影響。- fwrite同上。
* 不建議使用的函數gets
* 操作文件時,遇到全緩存要注意使用fflush刷新。
追蹤代碼:
- ctags追蹤代碼 vim -t 變量/類型
- 選擇合適的代碼之後繼續追蹤,光標移動,ctrl+]
- vim -t需要安裝ctags
- 解壓內核 tar -vxf 壓縮文件
- 切換到內核目錄下ctags -R 生成tags文件
- 配置~/.vimrc 加入一行 set tags+=tags路徑