日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

集训第一天所学

發布時間:2024/4/13 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 集训第一天所学 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一天我們主要學習了文件編程的相關知識
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;

/*int fd = open(argv[1], O_RDWR); if (-1 == fd) {perror("open");exit(1); }length = lseek(fd, 0, SEEK_END); //文件指針移動到文件末尾,返回移動后指針距離文件開頭的長度*/ FILE *fp = fopen(argv[1], "a+"); if (NULL == fp) {perror("fopen");exit(1); } fseek(fp, 0, SEEK_END); //成功返回0 length = ftell(fp); //返回文件指針距離文件開頭的長度 printf("%d\n", length);fclose(fp);return 0;

}
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;

/*fd = open("hello.c", O_RDWR); //讀寫方式打開存在的文件 if (-1 == fd) {perror("open");exit(1000); }*///fd = open("hello.txt", O_RDWR | O_CREAT, 00700); //先創建文件,再打開,文件可以存在 fd = open("hello.txt", O_RDWR | O_CREAT | O_EXCL, 00700); //先創建文件,再打開, 文件必須不存在 if (-1 == fd) {perror("open");exit(1); }scanf("%s", buf); ret = write(fd, buf, strlen(buf)); if (-1 == ret) {perror("write");exit(1); }//lseek(fd, 0, SEEK_SET); //相對文件開頭移動0個字節 //lseek(fd, strlen(buf) * -1, SEEK_CUR); //相對當前位置,向前移動xxx個字節 lseek(fd, strlen(buf) * -1, SEEK_END); //相對文件末尾,向前移動xxx個字節memset(buf, 0, sizeof(buf)); ret = read(fd, buf, sizeof(buf)); if (-1 == ret) {perror("read");exit(1); } printf("read from txt : %s\n", buf);close(fd);return 0;

}
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,但也可以是所讀完的數據的長度。
自我評價:多敲代碼,上課多做筆記。

總結

以上是生活随笔為你收集整理的集训第一天所学的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。