集训第一天所学
第一天我們主要學習了文件編程的相關知識
1.不帶緩存的(系統調用)-文件訪問:
主要學習了open,read,write,lseek函數的運用。
2.帶緩存的(庫函數)- 文件訪問
主要學習了fopen,fread,fwrite,fseek.
3.不帶緩存的I/O對是文件描述符操作,帶緩存的I/O是針對流的。
標準I/O庫就是帶緩存的I/O,它由ANSI C標準說明。當然,標準I/O最終都會調用上面的I/O例程。
標準I/O庫代替用戶處理很多細節,比如緩存分配、以優化長度執行I/O等。
4.對于lseek成功返回返回移動后指針距離文件開頭的長度,對于fseek成功返回0.
之后我們講了測試了不帶緩存與帶緩存下文件的長度,代碼如下:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc, char *argv[])
{
int length;
}
5.然后我們還講了不帶緩存下實現一個文件到另外一個文件的拷貝,代碼如下:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int fd;
char buf[32] = {0};
//int ret;
ssize_t ret;
}
6.void perror(const char *s); perror (“open_port”);
包含頭文件(不可以掉了這個頭文件):
#include <stdio.h>//包含perror的頭文件
函數說明
perror ( )用 來 將 上 一 個 函 數 發 生 錯 誤 的 原 因 輸 出 到 標 準 設備 (stderr) 。參數 s 所指的字符串會先打印出,后面再加上錯誤原因字符串。此錯誤原因依照全局變量error 的值來決定要輸出的字符串。在庫函數中有個error變量,每個error值對應著以字符串表示的錯誤類型。當你調用"某些"函數出錯時,該函數已經重新設置了error的值。perror函數只是將你輸入的一些信息和現在的error所對應的錯誤一起輸出。
7. man后參數(數字或者字母)作用介紹
8.man后面參數(數字或者字母)作用
1是普通的命令
2是系統調用,如open,write之類的(通過這個,至少可以很方便的查到調用這個函數,需要加什么頭文件)
3是庫函數,如printf,fread
4是特殊文件,也就是/dev下的各種設備文件
5是指文件的格式,比如passwd,就會說明這個文件中各個字段的含義
6是給游戲留的,由各個游戲自己定義
7是附件還有一些變量,比如向environ這種全局變量在這里就有說明
8是系統管理用的命令,這些命令只能由root使用,如ifconfig
n新文檔,可能要移到更適合的領域。
o老文檔,可能會在一段期限內保留。
l本地文檔,與本特定系統有關的。
之后我發現自己對于函數用法還掌握的不熟練,應勤加記憶。
收獲:
(1)我發現緩存區到磁盤實現的都是write操作,
反之磁盤到緩沖區則是read操作,且緩沖區屬于內存,兩個操作都是在內存和磁盤間操作。
(2)read函數讀完數據后值為0,但也可以是所讀完的數據的長度。
自我評價:多敲代碼,上課多做筆記。
總結
- 上一篇: 单链表之无头和有头--逆序
- 下一篇: 集训2--进程控制理论