99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

C語(yǔ)言文件操作全解析:從流模型到實(shí)戰(zhàn)避坑指南

C語(yǔ)言文件操作全解析:從流模型到實(shí)戰(zhàn)避坑指南 很多人學(xué)C語(yǔ)言學(xué)到指針就覺(jué)得到頭了結(jié)果一寫(xiě)到文件讀寫(xiě)就卡殼。我自己帶過(guò)幾個(gè)實(shí)習(xí)生問(wèn)fopen返回NULL怎么辦有人直接回答“報(bào)錯(cuò)唄”再往下問(wèn)errno、perror、文本模式和二進(jìn)制模式的區(qū)別基本就沒(méi)人能接住。其實(shí)文件操作沒(méi)有想象中難它背后就三件事把數(shù)據(jù)從內(nèi)存搬到磁盤(pán)、從磁盤(pán)讀回內(nèi)存、在搬的過(guò)程中不丟數(shù)據(jù)。這篇文章我打算把C語(yǔ)言文件操作的底層模型、常用API、實(shí)際案例和踩坑記錄放在一起講盡量把“為什么這樣寫(xiě)”也講清楚。不管你是剛學(xué)完指針的學(xué)生還是在嵌入式項(xiàng)目里需要保存參數(shù)的開(kāi)發(fā)者應(yīng)該都能從里面找到能直接用的東西。1. 文件操作要先想清楚C語(yǔ)言里的“文件”到底是什么1.1 從內(nèi)存到磁盤(pán)為什么程序需要文件先問(wèn)一個(gè)看起來(lái)廢話的問(wèn)題程序?yàn)槭裁匆僮魑募驗(yàn)閮?nèi)存是易失的。你定義了一個(gè)結(jié)構(gòu)體數(shù)組跑完函數(shù)數(shù)據(jù)都在可進(jìn)程一退出這些數(shù)據(jù)就沒(méi)了。要讓數(shù)據(jù)在下次啟動(dòng)時(shí)還在就必須落到磁盤(pán)、SSD或者其他持久化介質(zhì)上。配置文件、日志、數(shù)據(jù)庫(kù)文件、圖片、音視頻本質(zhì)上都是同一個(gè)操作程序跟外部存儲(chǔ)交換數(shù)據(jù)。C語(yǔ)言標(biāo)準(zhǔn)庫(kù)里說(shuō)的“文件”比操作系統(tǒng)里的“文件”范圍更寬。它可以是磁盤(pán)上的一個(gè)普通文件也可以是標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)錯(cuò)誤這些設(shè)備。你在代碼里用printf往stdout打印其實(shí)就是在做文件操作只是這個(gè)“文件”默認(rèn)接的是顯示器。理解了這一點(diǎn)以后看到fprintf(stdout, hello)就不會(huì)覺(jué)得奇怪它跟printf(hello)是同一個(gè)動(dòng)作。1.2 流(stream)與文件指針先忘掉“文件”這個(gè)詞C語(yǔ)言操作文件核心概念不是“文件”而是“流”。你可以把流想象成一根水管數(shù)據(jù)就是從水管里流過(guò)的水。程序要讀文件就是打開(kāi)一根從文件指向程序的水管字節(jié)從磁盤(pán)流進(jìn)來(lái)要寫(xiě)文件就是打開(kāi)一根從程序指向文件的水管數(shù)據(jù)從內(nèi)存流出去。C語(yǔ)言使用FILE類(lèi)型來(lái)表示一根已經(jīng)打開(kāi)的水管。FILE是一個(gè)結(jié)構(gòu)體里面裝著文件描述符、緩沖區(qū)位置、讀寫(xiě)狀態(tài)、錯(cuò)誤標(biāo)志這些信息。但你不用關(guān)心它內(nèi)部長(zhǎng)什么樣只要拿到FILE *指針后續(xù)的讀寫(xiě)函數(shù)都靠它工作。注意FILE *不是文件內(nèi)容本身它只是訪問(wèn)文件的“把手”。用完了要fclose這個(gè)“把手”才會(huì)還給系統(tǒng)。標(biāo)準(zhǔn)庫(kù)在程序啟動(dòng)時(shí)自動(dòng)打開(kāi)了三個(gè)流stdin、stdout、stderr。所以你看C語(yǔ)言程序不需要fopen就能直接scanf、printf因?yàn)闃?biāo)準(zhǔn)流已經(jīng)預(yù)先打開(kāi)了。1.3 打開(kāi)文件前必須回答的四個(gè)問(wèn)題很多新手寫(xiě)文件操作上來(lái)就fopen(test.txt, r)然后發(fā)現(xiàn)打不開(kāi)就懵了。我建議在寫(xiě)fopen之前先問(wèn)自己四個(gè)問(wèn)題我要讀還是寫(xiě)還是既要讀又要寫(xiě)對(duì)應(yīng)r、w、a、r這些模式。文件不存在怎么辦讀模式會(huì)失敗寫(xiě)模式會(huì)創(chuàng)建。我處理的是文本文件還是二進(jìn)制文件這決定了要不要加b。打開(kāi)失敗了我怎么處理是直接退出還是提示用戶(hù)還是跳過(guò)繼續(xù)跑這四個(gè)問(wèn)題想清楚代碼就不可能寫(xiě)得太亂。我見(jiàn)過(guò)不少人把fopen的返回值直接傳給下一個(gè)函數(shù)完全不判空最后在無(wú)人值守的服務(wù)上崩掉查半天才發(fā)現(xiàn)是配置文件路徑寫(xiě)錯(cuò)了。文件操作和指針操作一樣第一原則就是任何可能失敗的調(diào)用都必須檢查返回值。2. 核心API使用拆解fopen、fclose和讀寫(xiě)函數(shù)怎么選2.1 fopen的打開(kāi)模式一張表記清楚fopen的第二個(gè)參數(shù)是模式字符串常見(jiàn)模式如下模式含義文件不存在時(shí)文件存在時(shí)r只讀失敗從頭讀w只寫(xiě)創(chuàng)建清空后寫(xiě)a追加寫(xiě)創(chuàng)建從末尾追加r讀寫(xiě)失敗從頭讀寫(xiě)w讀寫(xiě)創(chuàng)建清空后讀寫(xiě)a讀寫(xiě)追加創(chuàng)建讀從頭寫(xiě)在末尾rb/wb等二進(jìn)制模式同上同上這里最容易踩的坑是w。它會(huì)在打開(kāi)文件的一瞬間把原有內(nèi)容清掉不管你后面有沒(méi)有寫(xiě)成功。如果你只是想往日志文件里追加一行不小心用了w整份日志就沒(méi)了。所以“追加日志”這種場(chǎng)景我習(xí)慣直接寫(xiě)a既省了fseek到末尾又不會(huì)誤清空。在Windows上區(qū)分文本模式和二進(jìn)制模式很重要。文本模式下讀文件時(shí)系統(tǒng)會(huì)把\r\n轉(zhuǎn)換成\n寫(xiě)文件時(shí)會(huì)把\n轉(zhuǎn)換成\r\n二進(jìn)制模式下不做任何轉(zhuǎn)換。而在Linux/macOS上r和rb沒(méi)有區(qū)別文本模式只是名義上的。這就導(dǎo)致一個(gè)典型問(wèn)題在Windows上寫(xiě)出來(lái)的文件拷貝到Linux或者反過(guò)來(lái)會(huì)出現(xiàn)行尾多一個(gè)\r或者少一個(gè)\r。解決思路后面我會(huì)講核心就是如果文件是程序之間交換的盡量統(tǒng)一用二進(jìn)制模式如果必須跨平臺(tái)處理文本讀進(jìn)來(lái)之后自己處理?yè)Q行符。2.2 字符級(jí)、行級(jí)、塊級(jí)讀寫(xiě)各自用在哪C標(biāo)準(zhǔn)庫(kù)提供了好幾套讀寫(xiě)函數(shù)選哪套取決于你的數(shù)據(jù)形態(tài)。逐字符讀寫(xiě)用fgetc和fputc。比如你要統(tǒng)計(jì)一個(gè)文件里有多少個(gè)a最直接的辦法就是循環(huán)fgetc。優(yōu)點(diǎn)是簡(jiǎn)單缺點(diǎn)是每次讀一個(gè)字符代碼寫(xiě)起來(lái)啰嗦。好在標(biāo)準(zhǔn)庫(kù)內(nèi)部有緩沖區(qū)實(shí)際系統(tǒng)調(diào)用次數(shù)不會(huì)那么夸張但跟批量讀相比仍然慢。逐行讀寫(xiě)用fgets和fputs。fgets的簽名是char *fgets(char *s, int size, FILE *stream)它會(huì)讀取包括換行符在內(nèi)的一行最多讀size-1個(gè)字符然后在末尾補(bǔ)\0。這里有個(gè)關(guān)鍵點(diǎn)如果一行特別長(zhǎng)超過(guò)size-1fgets不會(huì)報(bào)錯(cuò)它只會(huì)先讀一部分剩下的留到下次調(diào)用再讀。你要么把緩沖區(qū)設(shè)大一點(diǎn)要么自己處理“半行”的情況。實(shí)際工程中我通常用fgets加上sscanf的組合既安全又好用后面配置解析器的例子就是這么干的。大塊數(shù)據(jù)用fread和fwrite。它們的簽名是size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);注意返回值的含義返回的是“成功讀寫(xiě)的元素個(gè)數(shù)”不是字節(jié)數(shù)。很多人寫(xiě)fread(buf, 1, 1024, fp)返回的是實(shí)際讀到的字節(jié)數(shù)如果寫(xiě)fread(buf, 1024, 1, fp)返回值只會(huì)是0或者1代表整個(gè)1024字節(jié)塊是否完整讀完。這兩者區(qū)別很大。做文件復(fù)制時(shí)我習(xí)慣用fread(buf, 1, sizeof(buf), fp)這樣返回值就是真實(shí)字節(jié)數(shù)不容易漏數(shù)據(jù)。下面給一個(gè)通用的文件復(fù)制函數(shù)#include stdio.h int copy_file(const char *src, const char *dst) { FILE *in fopen(src, rb); if (!in) { perror(src); return -1; } FILE *out fopen(dst, wb); if (!out) { perror(dst); fclose(in); return -1; } char buf[4096]; size_t n; while ((n fread(buf, 1, sizeof(buf), in)) 0) { if (fwrite(buf, 1, n, out) ! n) { perror(dst); fclose(in); fclose(out); return -1; } } fclose(in); fclose(out); return 0; }這個(gè)函數(shù)用二進(jìn)制模式打開(kāi)文件防止Windows在文本模式下把0x1A之類(lèi)的字節(jié)當(dāng)成EOF處理。緩沖區(qū)設(shè)成4096是權(quán)衡了內(nèi)存占用和系統(tǒng)調(diào)用次數(shù)之后比較常用的值。真正到了高性能場(chǎng)景還會(huì)用更大的緩沖或者直接用系統(tǒng)調(diào)用但作為通用復(fù)制邏輯這段代碼足夠穩(wěn)。2.3 格式化讀寫(xiě)fprintf/fscanf和sscanf的配合如果你想往文件里寫(xiě)“人類(lèi)可讀”的數(shù)據(jù)比如timeout30用fprintf非常方便。它跟printf的區(qū)別只是多了一個(gè)FILE *參數(shù)。讀取時(shí)對(duì)應(yīng)的fscanf卻是個(gè)坑它遇到空白字符會(huì)跳過(guò)遇到類(lèi)型不匹配會(huì)直接失敗而且不會(huì)告訴你失敗發(fā)生在哪一列。如果你只是讀一個(gè)整數(shù)fscanf(fp, %d, n)還能湊合用要解析結(jié)構(gòu)稍微復(fù)雜一點(diǎn)的文本就很容易留坑。我的經(jīng)驗(yàn)是讀文件時(shí)盡量用fgets先拿一行再用sscanf從字符串里解析。這樣每一行的錯(cuò)誤影響范圍可控你還可以針對(duì)某一行打日志。比如讀一個(gè)“keyvalue”的配置文件char line[256]; while (fgets(line, sizeof(line), fp)) { char key[64] {0}; char value[128] {0}; if (sscanf(line, %63[^]%127[^\n], key, value) 2) { printf(key[%s] value[%s]\n, key, value); } }這里%63[^]的意思是“讀取最多63個(gè)不是的字符”%127[^\n]的意思是“讀取最多127個(gè)不是換行的字符”。這種寫(xiě)法比%s安全因?yàn)樗薅俗畲箝L(zhǎng)度不會(huì)把緩沖區(qū)長(zhǎng)度的數(shù)據(jù)寫(xiě)到數(shù)組外面。注意sscanf不會(huì)幫你自動(dòng)去掉前后的空格所以解析后需要自己trim。后面配置解析器里我會(huì)放一個(gè)完整的trim函數(shù)。2.4 文件定位與錯(cuò)誤處理fseek/ftell/rewind除了順序讀寫(xiě)C語(yǔ)言還支持隨機(jī)訪問(wèn)。fseek可以把讀寫(xiě)位置移動(dòng)到文件任意偏移ftell返回當(dāng)前位置相對(duì)于文件開(kāi)頭的偏移rewind把位置重置到開(kāi)頭。這三個(gè)函數(shù)配合起來(lái)最常見(jiàn)的用途是獲取文件大小long get_file_size(FILE *fp) { long pos ftell(fp); fseek(fp, 0, SEEK_END); long size ftell(fp); fseek(fp, pos, SEEK_SET); return size; }先記住當(dāng)前位置跳到文件末尾拿到偏移再跳回來(lái)。這里的SEEK_SET、SEEK_CUR、SEEK_END對(duì)應(yīng)“從開(kāi)頭”“從當(dāng)前位置”“從文件末尾”三個(gè)基準(zhǔn)。有一點(diǎn)要提醒在文本模式下因?yàn)閾Q行符轉(zhuǎn)換ftell的返回值可能不是真實(shí)的字節(jié)偏移。所以如果你要處理的是二進(jìn)制數(shù)據(jù)請(qǐng)用二進(jìn)制模式打開(kāi)。另外ftell返回的是long在32位系統(tǒng)上最大只能表示2GB左右的文件。想要支持超大文件就得用fseeko/ftello或者平臺(tái)相關(guān)的接口普通課程作業(yè)和中小項(xiàng)目可以不考慮。錯(cuò)誤處理是文件操作最容易忽略的部分。fopen失敗時(shí)返回NULL同時(shí)設(shè)置全局變量errno。用perror(fopen)會(huì)打印“fopen: 具體原因”用strerror(errno)可以獲得錯(cuò)誤描述字符串。我一般這么寫(xiě)#include errno.h #include string.h FILE *fp fopen(path, r); if (!fp) { fprintf(stderr, open %s failed: %s\n, path, strerror(errno)); return -1; }這樣日志里能看到路徑也能看到原因排查效率高很多。3. 實(shí)操用C語(yǔ)言實(shí)現(xiàn)一個(gè)“鍵值對(duì)配置文件解析器”3.1 需求說(shuō)明與設(shè)計(jì)思路理論知識(shí)講太多容易飄下面寫(xiě)一個(gè)能直接用的例子解析類(lèi)似config.ini的鍵值對(duì)配置文件。要求支持空行、#開(kāi)頭的注釋、keyvalue格式并且兩邊可以有多余空格。比如# 服務(wù)器配置 timeout 30 server_name main debugfalse最終提供這樣一個(gè)函數(shù)int get_config_value(const char *filename, const char *key, char *out, size_t out_size);功能是讀取filename指定的文件找到key對(duì)應(yīng)的值拷貝到out。找不到配置項(xiàng)返回-2文件打開(kāi)失敗返回-1成功返回0。為什么要用這個(gè)函數(shù)而不是直接暴露一個(gè)全局結(jié)構(gòu)體因?yàn)椴煌K關(guān)心的配置項(xiàng)不同按需查詢(xún)比較靈活而且內(nèi)存由調(diào)用者管理不容易出現(xiàn)隱藏的全局狀態(tài)。設(shè)計(jì)上我選擇“逐行讀取再解析”的方式而不是用fscanf直接解析文件。原因前面提過(guò)fscanf遇到不匹配的行會(huì)打亂讀取狀態(tài)沒(méi)辦法只跳過(guò)一行繼續(xù)往后再試。用fgets一次讀一行解析失敗就繼續(xù)下一行容錯(cuò)性好很多。3.2 代碼實(shí)現(xiàn)與關(guān)鍵點(diǎn)講解先寫(xiě)trim_whitespace把字符串前后空白去掉。這里必須處理\r因?yàn)閃indows文件的行尾是\r\n我們用fgets讀進(jìn)來(lái)的行在Linux上可能末尾是\n在Windows文本模式下會(huì)變成\n但如果用二進(jìn)制模式讀或者從Linux拷過(guò)來(lái)的文件就可能在\n前面還有一個(gè)\r。trim把它去掉解析就統(tǒng)一了。#include stdio.h #include stdlib.h #include string.h #include errno.h #define MAX_LINE 256 #define MAX_KEY 64 #define MAX_VALUE 128 static void trim_whitespace(char *s) { char *start s; while (*start || *start \t || *start \r || *start \n) { start; } if (start ! s) { memmove(s, start, strlen(start) 1); } size_t len strlen(s); while (len 0 (s[len - 1] || s[len - 1] \t || s[len - 1] \r || s[len - 1] \n)) { s[--len] \0; } }然后是主函數(shù)int get_config_value(const char *filename, const char *key, char *out, size_t out_size) { FILE *fp fopen(filename, r); if (!fp) { fprintf(stderr, open %s failed: %s\n, filename, strerror(errno)); return -1; } char line[MAX_LINE]; int found 0; while (fgets(line, sizeof(line), fp)) { char *p line; while (*p || *p \t) { p; } if (*p # || *p \n || *p \0) { continue; } char k[MAX_KEY] {0}; char v[MAX_VALUE] {0}; if (sscanf(p, %63[^]%127[^\n], k, v) 2) { trim_whitespace(k); trim_whitespace(v); if (strcmp(k, key) 0) { if (out_size 0) { strncpy(out, v, out_size - 1); out[out_size - 1] \0; } found 1; break; } } } fclose(fp); return found ? 0 : -2; }幾個(gè)細(xì)節(jié)你別跳過(guò)。第一進(jìn)入循環(huán)之前我先用fopen(filename, r)打開(kāi)文件這里故意用文本模式因?yàn)樵跇?biāo)準(zhǔn)C里文本模式處理文本文件是符合直覺(jué)的。既然解析器只處理文本配置就不用擔(dān)心換行符轉(zhuǎn)換。第二fgets每次讀一行while循環(huán)判斷條件天然會(huì)在讀到EOF時(shí)結(jié)束。如果你用do-while就得先讀一次再判斷遇到空文件反而要多處理一次所以這里while更合適。第三sscanf的格式串里%63和%127分別對(duì)應(yīng)k和v的最大長(zhǎng)度加上結(jié)尾的\0不會(huì)越界。第四strncpy不會(huì)自動(dòng)補(bǔ)\0所以我手動(dòng)把最后一個(gè)字符置為\0防止目標(biāo)數(shù)組變成非字符串。3.3 編譯運(yùn)行與驗(yàn)證為了測(cè)試寫(xiě)一個(gè)mainint main(void) { char value[MAX_VALUE] {0}; int ret get_config_value(config.ini, timeout, value, sizeof(value)); if (ret 0) { printf(timeout %s\n, value); } else if (ret -1) { fprintf(stderr, config file open error\n); } else { fprintf(stderr, key not found\n); } return 0; }編譯命令gcc -stdc11 -Wall -Wextra -o config_parser config_parser.c當(dāng)前目錄下建一個(gè)config.ini# 服務(wù)器配置 timeout 30 server_name main debugfalse運(yùn)行./config_parser如果一切正常輸出timeout 30。你可以試試把timeout后面的空格去掉、在前后隨意加空格、加空行、加注釋結(jié)果都應(yīng)該一樣。這個(gè)解析器雖然不大但足夠作為文件讀取的一個(gè)完整模板。后續(xù)要擴(kuò)展成更復(fù)雜的格式比如數(shù)組、多行值再往深處加解析邏輯就行。4. 調(diào)試與避坑文件操作最常見(jiàn)的幾個(gè)翻車(chē)現(xiàn)場(chǎng)4.1 文件打不開(kāi)卻找不到原因fopen返回NULL首先要看錯(cuò)誤信息而不是猜。用perror或者strerror(errno)把原因打出來(lái)。常見(jiàn)的原因我整理成了一張表現(xiàn)象常見(jiàn)原因排查方向No such file or directory路徑寫(xiě)錯(cuò)或文件不存在確認(rèn)文件路徑用絕對(duì)路徑測(cè)一次Permission denied沒(méi)有讀/寫(xiě)權(quán)限檢查文件權(quán)限和運(yùn)行用戶(hù)Text file busy文件正在被執(zhí)行等進(jìn)程結(jié)束或換一個(gè)測(cè)試文件Is a directory把目錄名當(dāng)成文件打開(kāi)了確認(rèn)路徑指向普通文件文件被其他進(jìn)程鎖住別的進(jìn)程獨(dú)占打開(kāi)Windows下用資源監(jiān)視器查句柄我可以負(fù)責(zé)任地說(shuō)大部分“打不開(kāi)”的根因是路徑問(wèn)題。特別是程序的工作目錄跟你以為的不一樣。例如在IDE里運(yùn)行程序當(dāng)前目錄往往不是源碼目錄而是項(xiàng)目根目錄或調(diào)試目錄。這時(shí)候相對(duì)路徑config.ini就會(huì)失效。最快的定位方法在代碼里先打印當(dāng)前工作目錄或者在fopen失敗時(shí)打印完整路徑。4.2 換行符、中文編碼和文本模式的坑換行符是文本文件跨平臺(tái)的永恒話題。Windows用\r\nLinux/macOS用\n。C標(biāo)準(zhǔn)庫(kù)在Windows文本模式下會(huì)自動(dòng)轉(zhuǎn)換在Linux上不轉(zhuǎn)換。如果你用fgets讀一個(gè)Windows生成的文本文件在Linux上會(huì)在每行末尾多出一個(gè)\r。解決套路很簡(jiǎn)單解析前做一次“行尾清洗”也就是我前面寫(xiě)的trim_whitespace把\r和\n都去掉。中文亂碼的問(wèn)題要區(qū)分兩層。文件讀寫(xiě)本身只是字節(jié)搬運(yùn)你用fprintf(fp, %s, 你好)寫(xiě)入U(xiǎn)TF-8編碼的中文再用fgets讀回來(lái)內(nèi)存里的字節(jié)沒(méi)有變化。亂碼通常發(fā)生在終端顯示環(huán)節(jié)Windows控制臺(tái)默認(rèn)代碼頁(yè)可能是GBK你往控制臺(tái)打印UTF-8字節(jié)自然就是亂碼。這跟文件操作沒(méi)關(guān)系是終端編碼配置的問(wèn)題。我的建議是文件內(nèi)容統(tǒng)一用UTF-8保存程序內(nèi)部也按UTF-8處理終端顯示的時(shí)候再按終端規(guī)則轉(zhuǎn)碼。4.3 緩沖區(qū)沒(méi)刷新、fclose沒(méi)調(diào)用導(dǎo)致數(shù)據(jù)丟失標(biāo)準(zhǔn)庫(kù)的文件寫(xiě)入是有緩沖區(qū)的。fwrite或fprintf先把數(shù)據(jù)寫(xiě)進(jìn)內(nèi)存里的緩沖區(qū)等到緩沖區(qū)滿(mǎn)、調(diào)用fflush、調(diào)用fclose或程序正常退出時(shí)才真正把數(shù)據(jù)刷到磁盤(pán)。如果你寫(xiě)完沒(méi)fclose程序又異常崩潰數(shù)據(jù)就可能丟。這種問(wèn)題在日志系統(tǒng)里特別常見(jiàn)日志明明打了崩潰前卻沒(méi)刷出去。所以寫(xiě)文件一定要配對(duì)fclose。如果程序接下來(lái)還要繼續(xù)運(yùn)行但又需要確保數(shù)據(jù)立即可見(jiàn)就調(diào)用fflush(fp)。還有fclose本身也可能失敗比如磁盤(pán)滿(mǎn)、網(wǎng)絡(luò)文件系統(tǒng)出錯(cuò)嚴(yán)謹(jǐn)?shù)拇a會(huì)檢查它的返回值。不過(guò)對(duì)大多數(shù)場(chǎng)景只要能在退出前把每個(gè)fopen都對(duì)應(yīng)一個(gè)fclose就能避免90%的詭異問(wèn)題。4.4 二進(jìn)制文件讀寫(xiě)時(shí)結(jié)構(gòu)體對(duì)齊與序列化問(wèn)題很多新手喜歡把一個(gè)結(jié)構(gòu)體直接寫(xiě)進(jìn)文件typedef struct { int id; char name[32]; } Player; Player p {1, hello}; fwrite(p, sizeof(p), 1, fp);這在單機(jī)單版本程序里沒(méi)問(wèn)題一旦要考慮兼容性坑就來(lái)了。第一是結(jié)構(gòu)體對(duì)齊int后面可能跟幾個(gè)填充字節(jié)sizeof(p)在不同編譯器、不同架構(gòu)下可能不一樣。第二是整數(shù)大小端x86是小端ARM有大端也有小端同一個(gè)結(jié)構(gòu)體寫(xiě)出來(lái)的字節(jié)在不同機(jī)器上可能完全無(wú)法解釋。第三是版本演化結(jié)構(gòu)體里加一個(gè)字段老文件就沒(méi)辦法讀了。正規(guī)做法是序列化也就是明確每個(gè)字段的存儲(chǔ)格式。比如固定用4字節(jié)保存id手動(dòng)按字節(jié)寫(xiě)入讀取時(shí)按字節(jié)拼回去。C語(yǔ)言沒(méi)有內(nèi)置序列化庫(kù)你可以在項(xiàng)目里自己實(shí)現(xiàn)一組工具函數(shù)或者引入現(xiàn)成的序列化方案。核心原則是文件格式要由“字節(jié)布局”定義而不是由“結(jié)構(gòu)體定義”決定。4.5 文件被占用、權(quán)限不足和操作系統(tǒng)層面的問(wèn)題最后說(shuō)一個(gè)跟操作系統(tǒng)交互的問(wèn)題。在Windows上如果一個(gè)文件正在被Word、Excel或者其他進(jìn)程獨(dú)占打開(kāi)你的程序嘗試用fopen寫(xiě)它會(huì)返回NULL錯(cuò)誤原因往往是“Permission denied”。這種時(shí)候不是代碼邏輯問(wèn)題是文件鎖沖突。排查時(shí)不要只盯著代碼去任務(wù)管理器看看有沒(méi)有相關(guān)進(jìn)程正在占用文件。Linux下也有類(lèi)似情況比如可執(zhí)行文件正在運(yùn)行時(shí)你不能直接覆蓋它會(huì)出現(xiàn)“Text file busy”。還有一個(gè)常見(jiàn)需求是刪除和重命名文件C標(biāo)準(zhǔn)庫(kù)提供了remove和rename函數(shù)。它們也可能會(huì)因?yàn)槲募徽加枚?。調(diào)用之后記得檢查返回值并用perror打印原因。有一個(gè)小技巧在寫(xiě)測(cè)試程序時(shí)如果remove失敗先看是不是當(dāng)前程序自己還沒(méi)fclose自己占用自己是最容易忽略的。調(diào)試文件操作時(shí)我習(xí)慣在關(guān)鍵路徑上打日志打開(kāi)成功、讀到多少字節(jié)、定位到哪個(gè)偏移、關(guān)閉成功。這個(gè)習(xí)慣幫我省了大量排查時(shí)間。我試過(guò)在一臺(tái)服務(wù)器上排查一個(gè)寫(xiě)日志失敗的問(wèn)題代碼看起來(lái)沒(méi)問(wèn)題文件路徑也正確最后是磁盤(pán)滿(mǎn)了fwrite的返回值沒(méi)檢查導(dǎo)致錯(cuò)誤被吞掉。那之后我所有寫(xiě)文件的代碼都會(huì)檢查返回值至少打一條警告。文件操作沒(méi)有太多玄學(xué)你把每一步的返回值都盯住問(wèn)題基本就藏不住了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
99ri精品| 色婷婷AⅤ| 一夜福利不卡| 爱操人妻| 日本免费91| 欧洲第一无人区观看| 久久99性爱视频| 婷婷五月天av| 日韩另类| 99热这里都是精品| www.久久爱.c n| 99热99在线| 精品人妻一区二区三区四区不卡在| 亚洲高清在线| 五月天丁香婷| 色播丁香婷婷五月激情| 99热这里是精品| 68热超碰在线| 日韩三十六页| 97碰碰叉| 真实的国产乱XXXX在线91| av在线观看免费| 五月天成人在线播放丁香| 色欲婷婷五月天| 日本9区视频| 天天爱天天操| 99ER热精品视频| www.五月婷婷.com| 色色婷| 深爱五月日韩| 五月激情六月婷婷| 九九精品热| 99精品丁香五月| www99在线观看视频| 99精品无码网站| 亚洲婷婷在线播放十月| 欧美性二区| 99热综合在线| 思思久久网| 丁香婷婷色| 99精品久久久久久久久| 999九九九久久久99HD| 91麻豆国产三级精品福利在线观看| 人妻内射视频| 国产毛片欧美毛片久久久| 色情成人五月天| 九九操操| 少妇高潮呻吟A片免费看软件| 欧美在线视频99| 婷婷欧美激情综合| 亚洲激情综合| 97超碰在线免费观看| 激情五月天激情五月天| 五月婷婷啪啪啪| 亚洲熟妇无码乱子AV电影| 看国产探花操逼三级片| 激情丁香六月| 成人精品视频99在线观看免费| 久久九九国产精品怡红院| 久久香蕉影院| 婷婷综合性爱网| av操逼网| AV动漫不卡无码免费| 五月天丁香综合在线| 综合久久伊人| av九九| 99re66热这里只有精品| 日在线V视频在线播放| 丁香婷婷六月激情综合| 深爱激情综合| 99精品国产乱码久久久人妻| 伊人婷婷综合| 狠狠狠狠狠干| 欧美日韩五月婷婷| 国产色色网址网站| 91se在线观看| 日本一級黃色一級片| 男人先锋久久| 欧美六月| 欧美色欲色欲天天天www| 激情性五月天免费小说视频| 婷婷性爱影院| 婷色综合| 五月丁香日本在线视频观看| 99re这里| 99无码| 雪千夏麻豆| 午夜色丁香| 日本在线视频www色| 成人色五月天| 丁香激情久久| 91oumei| 人人妻人人澡| 久热网在线视频| 中文字幕成人影视| 五月婷婷性爱网| 欧美操逼天堂| 天天色综合网1| 99操| 91精品婷婷国产综合 | 99九九99九九九视频精彩| 色九月婷婷| 九九婷| 五月丁香在线观看99| 丁香六月婷婷缴情欧美| www,com,五月色色| 国产高清视频91九九九久久久| 综合久久高清| 能直接看的av网站| 国产性av| jiujiu无码五区| 亚洲成人网站在线播放| 婷婷久久18| 玖玖在线资源视频| 婷婷丁香十月| 91干| 97AV在线视频| 99精品一二三四视频| 深爱婷婷色| 欧美乱码国产一级A片| 极品人妻VIDEOSSS人妻| 五月天狠狠网站| 蜜乳中文字| 日本久久99| 久久9999| 婷婷激情综合| 99丁香五月婷婷在线| 日日色五月天| 五月丁香在线| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 五月激情综合性爱| 99精品免费欧美小视频| 九九Y精品热播| 婷婷五月开心中文字幕在线| 国产精品久久久久久久久久免费| 深情六月婷婷综合久久| 99热婷婷| 六月丁香深深爱| 丁香五月激情综合| 丁香五月综合激情久久潮喷| 超碰成人免费| 很很干在线视频| 激情影院丁香五月| 色综合久久88色综合天天人守婷| 亚洲乱码日产精品BD| 婷婷五月天免费小说| 九九干视频| 婷婷五月乱交换| 激情五月深爱婷婷| 婷婷国产欧美97| 久久思思精品| 人人干女人| 丁香五月天激情视频| 中文字幕人妻一区二区| 婷婷基地爱| 一区操| 狠狠插狠狠| 久久一级AV| 激情综合网,五月| 夫妇交换刺激做爰| 激情5月婷婷| 97操碰免费视频| 五月天天爽| 色婷婷第四色| 99热这里有精力| 91超级碰碰碰| www.金莲av| 狠狠撸激情综合丁香五月天俺来啦| 极品人妻VIDEOSSS人妻| 五月激情综| 97干在线观看| 啪啪一区| 欧美α√| 久鲁鲁色网| 免费观看18视频网站| 丁香五月天欧美| 五月丁香婷婷激情图片| 色欲丁香| 丁香五月激情视频在线| 91九色中文字幕女在线观看| 婷婷五月成人| 九九热这里只有精品6| 涩涩婷婷五月| 久久AAAA片一区二区| 五月婷婷综合色啪首页| 五月丁香婷婷啪啪综合| 天天天天操| 婷婷色五月情| 丁香五月婷婷啪啪| 9色操| 十一月婷婷激情四射| 九九综合九九| 天天日日| 婷婷六月色| 新精品99| 少妇激情五月婷婷| 亚洲第一成人无码A片| 免费观看欧美成人AA片爱我多深| 五月丁香六月色| 婷婷,五月天,丁香,第一| 九九热123| 亚洲VA口| 99只有这里是精品| 色5在线| 免费操超碰| 久热只有精品| 五月激情婷婷六月| se99高清无码| 91在线视频综合| 大香蕉伊人久久| 热99在线| 婷婷五月中文字幕国产| 激情综合女人网五月播播| 99在线资源视频| 色色色999| 亚洲综合色丁香五月天| 六月婷婷深深爱| 丁香五月 性爱| 久久色情| 激情五月天网站| 伊人六月丁香婷婷| 玖玖在线资源视频| 中文网AV| 婷婷五月丁香久久| 六月婷婷香蕉| 色婷婷综合电影| a网站免费观看| 亚洲五月丁香六月婷婷| 婷婷丁香五月在线播放| www久热com| 丁香五月婷婷五月天在线| 婷婷五月色播放| 99er免费在线观看| 五月丁香激情片| 99在线免费视频| 91re色综合视频| 99热这里只有精| 在线中文亚洲| 91.com男女操| 97在线刺激| 久热免费| 性色天| 婷婷五月天激情影片| 99热99成人| 九艹在线| 99热伊人| 色五月婷婷久久爱| 五月天婷婷激情干干| 深爱丁香网| 97香蕉久久超级碰碰高清版 | 婷婷五月天VI| 亚洲精品另类| 岛国午夜视频| 超碰成人在线观看| a在线观看| 丁香婷婷激情六月五月开心| 久久婷狠狠色| 精品色色| 99人妻碰碰久久久禁片| 超碰在线免费观看3 9| 亚洲精品字幕| 99福利视频导航| 久久婷婷五月丁香蜜桃网| 人妻内射一区二区在线视频| 日本综合九九| www.jiujiujiu| 五月丁香啪啪啪综合网| 玖玖在线资源视频| 五月丁香婷婷俺| 色婷婷精品| www夜夜| 欧美成人日韩| 99热这里都是精品| 五月婷婷久久网| 国产av第一专区| 欧美婷婷综合网| 欧美久人人| 丝袜激情网| 丁香五月天网站| 婷婷五月激情四月综合| 五月香六月婷| 婷婷性爱| 操婷婷久久| 色九月婷婷综合| 97丁香花五月天激情小说| 婷婷在线午夜| 激情婷婷久久| 久久综合久色欧美综合狠狠| 五月丁香毛片| 中文字幕丁香五月| 婷婷五月电影| 美女婷婷激情亚洲| 粉嫩av懂色av蜜臀av熟妇| 、激情六月天| 色XX综合网| 久热中文字幕| 五月色情婷婷| 久久这里只有国产| 色五月在线播放| 久久综合婷婷| 九色激情网| 9er热在线精品视频| 五月丁香久久丝袜啪啪| 久色| 91精品久久久久久久久| www.minyis.com【JT】国内CDN落地页保证转化QQ2101460746 | 成人va在线播放| 深爱五月婷婷| 色玖玖玖| 欧美啄木乌丝袜人妻系列| 97精品自拍视频| 超碰在线人妻| caop在线| 九九成人视频| 人妻在线观看视频| 国产又黄又爽又激情不遮挡视频在线观看| 色天堂在线| 香蕉久久av一区二区三区| 超碰在线综合| 夜夜操天天干| 久久视9精| 天天摸天天肏| 夜夜躁婷婷AV| 亚洲在线视频321| 五月丁香好婷婷姑娘综合网| 激情欧美五月丁香| 99热国内精品| 激情综合五| 国产人妻人伦精品一区二区| 色色永久| 99视频在线精品| 激情国产综合| 婷香五月激情视频| 人人肏逼视频在线一区二区| 欧美色小说婷婷| 婷婷色网| 99re66热这里只有精品| 日韩无码专区| 国产精品久久久久久白浆色欲| 六月婷婷久久大全| 婷婷激情综合色五月久久91| 五月丁香六月婷婷综合| 婷婷五月综合社区在线| 开心五月深爱激情| 一本久久婷婷| 一级操逼内射在线视频| 久久婷婷桃花五月天| 久热只有这里精品| 6 9式性爱视频在线播放| 丁香六月 人妻| 开心激情婷婷| 米奇影视资源777狠狠色婷婷五月天激情网| 五月婷婷深深爱| 久久婷婷国产| 99亚州综合精品成人网| 久久五月天合网| 黄网在线播放| 久久婷出差欧美色两性综合网| 99热综合| 天天色,天天操,天天射| 黄色av网站在线免费播放| 午夜性爱影视一区77| 综合网色| 69午夜成人影片| 中字幕视频在线永久在线观看免费| 精品久久婷婷五月天| 色色com| 婷婷 久综合| 成人精品在线观看| 色狠狠综合| 七七色综合| 色五月中文网| 丁香综合婷婷开心激情网| 日韩aaaaa| 日本五月丁香| 色爱综合五月| AA丁香综合激情| 日韩色色小视频| 国产人妻777人伦精品HD| 婷婷六月插屄激情| 欧美性爱一区| 午夜天堂一区人妻| 亚洲国产99| 日韩影院三级| 日韩欧美成人一区二区三区| 超碰资源在线| 深爱激情网婷婷| 天天干天天av天天射 | 乱精品一区字幕二区| 午夜婷婷五月天| 91婷婷五月丁香碰| 嫩草AV久久伊人妇女超级A| 色青青视频| 99久热视频在线| 天天肏高清在线| eeuss人妻| 久久五月婷天天干| caop在线视频| 天天综合网亚洲网站| 99热综合在线| 99碰碰。| 五月婷婷激情| 99ri精品在线| 天天色官网| www..999热久| 精品操逼一区二区| 五月丁香综合激情| 成人免费高清在线播放| 激情二色月| 欧洲亚洲免费视频9 | 99啪啪视频| 久久人妻在线| 视频一区二区在线| 亚洲黄色影视| 国产无套精品一区二区| 天天做天天双| 激情综合在线观看| 任我干视频在线观看| 色婷婷色99国产综合精品| 婷婷色播色五月五色五月天色妇| 丁香六月婷婷久久亚洲天堂| 亚洲激情AV| 婷婷综合在线| 亭亭色天香| www.激情com| 五月婷婷综合网| 色欲午夜无码久久久久久张津瑜 | 亚洲成人五月天| 日本久久天堂| 激情综合五| 超PEN精品在线| 色婷婷88| 天天天综合网| 五月婷婷九月婷婷九月婷婷| 青草网在线观看| 亚洲国产黄色电影| 久久超级碰碰| 99热这里只有精品99| 日韩抽插操逼| 久久综合激情| 丁香九九九九| 国产成人AV在线播放| 国产精品A成V人在线播放| 99国产小视频| 视频色色色色色色| 另类综合国产| 夜夜爽日日躁| 99re热视频| www.狠狠操.co m| 九九热99熟女| 国产婷婷综合| 超碰99久久| 丁香五月天社区婷婷| 亚洲无AV在线中文字幕| 俺也去五月婷婷丁| 99ER热精品视频| 国产亚洲在线观看| 欧美黄色AA片哗啦啦啦| 五月婷婷69| 疯狂做受XXXX高潮A片| 婷婷六月色| 男女99免费视频| 久色资源| 开心激情婷婷| 久久ww| 色99热| 天天操夜夜操| 亚洲六月色婷婷| 伊人婷婷综合| 激情五月综合| 久久思思热| 精品亚洲国产成AV人片传媒| 国产精产国品一二三在观看 | 婷婷伊人激情婷婷| 玖操97| 69五月天视频| 欧美xx激情视频在线观看| 亚州精品久久久久AV无码| 五月丁香久久激情网| 色色色精品无码区| 俺去也在线视频| 天天舔天天摸天天透| 日本性激情色播| 91在线人| 99热久久日本| 亚洲最大在线| 人人添人人| 狠狠干激情五月| 婷婷丁香激情| 五月天婷婷丁香基地在线观看| 97人妻碰碰碰久久香蕉| 五月丁香激情综合网| 久久婷五月| 综合久久五月| 综合久久影院| 天天色天天爱天天舔| 五月天另类小说久久小说网| 六月份天丁香婷婷| 九九色影院| 日韩欧美一级大黄网站| 人妻熟人中文字幕一区二区| 五月婷婷综合天天操| 激情五月天在线视频| 97在线观视频免费观看| 日本 色综合| 久久久WWW| 色香五月天| 玖玖资源站中文| 久综合色| 欧美日本99| 九九精品综合| 色五月六月婷婷| 99无码视频| 日本猛少妇色XXXXX猛叫| 99综合97| AV色五月婷婷| 免费看欧美成人A片无码| 91精品91久久久中77777| 国产精品扒开腿做爽爽爽A片唱戏| 丁香六月婷婷色XXXXX| www婷婷| 九九九午夜影院成人| 五月天免费色| 久久色天堂| 成人国产欧美大片一区| 久久久五月婷婷| 日韩成人精品一区久久久久| 91se在线视频| 婷婷激情六月中文| 狠狠干总合| 久艹大香蕉| 亚洲乱码日产精品BD| 激情五婷网| 国语精品探花| 久久xx| 五月婷婷|欧美| 国产精品香蕉| 亚洲乱码日产精品BD| 99爱爱网| 思思热高清在线观看| 久久久com| 成人短视频免费观看| 26UUU在线观看| 涩五月婷婷| 激情超碰网| 插插五月天| 涩五月婷婷| 激情五月天99色| 五月婷婷狠狠干| www激情| 色婷婷AV在线| 婷婷六月综合基地| 欲色人妻| 久久人妻高清中文| 99九九这里有免费视频| 五月丁香999| 久热这里只有精品99re| 欧美日韩99| 日本美女五月天| 婷婷六久久| 欧美va精品va老师va| 天天看A片| 中文字幕亚洲-区久久99婷婷| 26uuuavcom| 成人午夜天| 五月天日日操夜夜操 | 天天爽夜夜爽夜夜爽精| 成人 在线 日韩| 26uuu偷拍亚洲欧洲综合| 五月之婷婷| 国产一级视频a| 日本天天综合| 九九一区| 麻豆五月丁香婷婷| 日韩AV中文在线观看| 天天拍夜夜爽日日| 九九99九九精品免费| 无码四色色色| 69超碰在线| 五月综合激情图片| 欧美午夜乱妇午夜福利| www,26uuu,c0m,色情| 久久3级片| 精品,99| 很很色丁香久久停停| 婷婷五月丁香六月综合网| 岛国AAAV| 97干免费视频| 国产片天天爽夜夜爽| 天天日天天舔| 五月综合缴情网| 欧美人人草草| 婷婷激情丁香六月| 99操无码视频观看| 五月天婷婷在线视频| www98日本小时间到了| 俺去也婷婷| 亚洲第一色色色| 久久精品国产一区二区三区四区| 激情婷婷网| 人人叉久| 成人在线日韩| 久久久久久丁香五月| 色综合久久8| 婷婷五月天影院| 丁香五月婷婷亚洲人| 最近韩国日本免费高清观看| 99综合激情久久精品久久| 久久婷婷五月综合激情国产| 天天综合精品| 丁香五月在线看| 国产精品久久..4399| 欧美性爱五月天| 亚洲五月天天| 婷婷色基地在线看| 丁香六月激情| 天天影视天天爽天天草| 五月欧美色播| 五月丁香婷婷综合网色欲| 丁香五月成人| 亚洲日本三级片| 久久五月天视频| 草榴视频黄色网| 九九無妻| 欧美色小说婷婷| 婷婷九月综合| 激情综合网激情五月丁香五月俺也去| 久久欧洲综合网| 久久久18| 激情婷婷黄色五月| 免费无码毛片一区二区A片| 综合激情网激情五月。| 五月婷婷另类| 中文字幕日韩成人| 在线视频区| www.五月天色色.com| 婷婷涩五月天综合| 久热只有这里有精品| 另类图片五月天激情| 五月丁香啪| 亚洲午夜一区二区| 综合97五月| 99五月婷| 欧美激情综合五月色丁香| 久久狠狠欧美| WWW久| 国产毛片欧美毛片久久久| 9精品在线| A久网| 欧美成人无码一区二区三区| av九九| 超碰在线观看成人视| 中文字幕日产A片在线看| 色伊人婷婷| 成人色情五月天婷婷丁香| 久久久久久欧美精品se一二三四| 久久色午夜在线导航| 超碰妻人人| 精品夜夜澡人妻无码AV| 99国产在线| 另类激情综合| 操九色| www.ppypp| 六月丁香深深爱| 99噜噜噜在线播放| 九九99视频精品| 99色在线观看| 天天操天天操天天操天天操天天操 | 色色色图| 这里只有精品视频99| 国产精品色色色色| 五月婷婷六月基地| 久久婷婷五月天激情唯美| 这里只有国产精品在线| 色月视频| 五月激激网w'w'w| 丁香桃色综合网| 色很很96| 丁香五月 综合| 欧美成人热| 小视频aaa久久久| 99日本精品视频热| 日韩综合网络男女香蕉a片| 综合色网站| 欧美丁香五月97色| 丁香六月婷婷综合| 婷婷五月天AV网| 亚洲综合网激情小说| 亚洲亚洲激情| 婷婷五月天黄色| 久久97| 久鲁鲁色网 | 日日射天天射| 亚洲第一第二网站| 狠狠狠狠狠狠| 欧美婷婷日本| 国外亚洲成AV人片在线观看| 国内自拍97在线| se.久久视频在线观看| 五月婷婷综合影院| 亚洲欧美成人在线| 天天日夜夜草进麻麻的子宫| 夜夜骑天天玩天天日| 色婷婷成人久久| 啪啪丁香五月| 丁香五月婷婷亚洲色图| 久久这里只有国产精品视频| xxx.色婷婷| 日韩av在线免费观看| 日本综合久久| 色噜噜狠狠狠狠色综合久欧美| 久久色五月天| 激情婷婷五月亚洲| 亚洲成人va| 91日本在线观看| 丰满少妇乱A片无码| 9 9热这里有精品| 9色视频在线| 夜夜夜夜做天天天做无码视频| 丁香婷婷成人网站| 久久丁香五月| 一起操 91N.com| 九九99在线免费在线观看视频| 色亭亭五月天网扯| 亚洲在线综合| 久久无码成人| 婷婷五月在线免费| 99青青草| 五月丁香六月婷婷网| 在线色婷婷| 丁香六月婷婷开心| 激情五月开心五月丁香五月| 丁香婷婷影院| 五月丁香A∨在线| 日韩黄黄| 色三级色三级| 欧美色色日韩| 草美女在线观看视频在线播放| 99视频只有这里精品| 久久婷婷色| 亚洲四色五月| 天天色综合网吨吧| 久久深爱激情网| 超碰操网| 色五月婷婷AV| 激情综合丁| 91精品久久久久久77777| 一起草aV| 热99精品视频在线观看| 爆乳熟妇一区二区三区爆乳照片| 精品久久久中文字幕大豆网推荐理由| 激情综合网五月在线播放| 欧美婷婷五月丁香| 人妻内射视频| 色综合com| 色 色 色综合com| 欧美性爱丁香五月| 4399在线观看免费高清电视剧| 五月天丁香成人| 丁香五月婷婷激情蜜桃| www.狠狠狠.com| 狠狠干综合| 色色五月丁香婷婷| 五月丁香婷婷色色色| 色婷婷无吗| 好好干Av| 天天色天天日| 日韩成人av在线| 97视频久久| 97婷婷狠狠久久综合9色| 99久在线精品99re8热| 99热 日韩| 久草五月天电影网| 亚洲网站观看视频| 中国AV性爱观看| 精品香蕉99久久久久网站| 婷婷亚洲五| 五月丁香综合中文| 91九色精品| 青青草五月天| 五月久久网| 亚洲综合另类| 色婷婷中文在线| 久久看婷婷| 色婷婷久久综合久色综| 久久丁香五月天| 91人人操人人| www九九热| 天天看片日日夜夜| 日韩AV在线影片| 激情五月婷婷综合网| 成人.在线日韩| 午夜色丁香| 香蕉五月婷婷| 五月丁香六月激情综合| 色色丁香婷婷综合| 六月婷婷五月天| 狠狠色婷婷7| 国产亚洲精品久久久久久豆腐 | 26UUU欧美| 四川操逼站| 女人天堂久久| 99免费热在线精品| 亚洲日韩一页精品发布| 人妻自慰高清合集| 天堂网色色| 亚洲日日操| 欧洲婷婷五月天| 99操碰| 五月天色婷婷基地| 色婷婷文字幕| 六月激情综合| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 天天撸天天干天天插| 涩玖玖免费视频| 五月丁香激情啪啪| 激情婷婷丁香色五月综合| 色综合婷婷99| 99干视频| 免费日韩99| 久久久久久18| 99热在这里只有精品| 五月丁香六月情婷婷久久| 五月丁香综合网| 五月婷婷av| 激情五月天婷婷视频| 91色在线| 粉嫩AV久久一区二区三区| 亚洲情a| 狠狠操综合| 夜夜嗨一区二区三区直播内容 | 婷婷的久久网站| 婷婷五月欧美综合| 91热视频色网站| www.色窝| 丁香五月婷婷亚洲综合精品| 久久黄色免费视频| 成人色图情色成人网 www.5b5b5bcom 五月天 | 大香蕉啪啪网| 五月综合色播播丁香婷婷| 亚洲熟女色| 婷婷久久爱| 涩综合婷婷| 丁香五月天电影| 青草性爱视频| 蒲京久久无码视频| 婷婷导航| 五月天婷婷免费| 人人做天天爱| 精品激情| 三级毛片7979| 婷婷丁香综合网| 日本色色色| 日本人人xxx| 婷婷五月丁香婷婷| 亚洲天堂热| 99色久| 男人操女人高潮91视频| 久久99热这里只频精品6学生| 精品一区二区三区四区五区六区介绍| 婷婷99丁香| 9热成人在线视频| 婷婷五月激情丁香| 9热视频在线观看| 这里只有精品69| 色月视频| 开心五月激情网| 91超级碰在线| 96色婷婷| 色都都狠狠色都都色综合色| 99精品成人无码A片观看金桔| 婷婷伊人中文字幕| 久久综合五月天| 五月婷婷丁香色吧网| 啪啪婷婷五月天激情| 久久九区| AV在线免费播放| 99少妇精品| 五月婷婷9| 狠狠久久婷五月综合色| AA片在线观看视频在线播放| 久久婷婷视频| 开心五月婷婷| 九九热在线99| 色婷婷丁香六月| 丁香五月首页| www.99久| 丁香六月激情| 大天天伊人| 操操熟女| 丁香六月婷婷| 三人荫蒂添的好舒服A片| 久久丁香五月天| 网站免费一站二站| 色五月婷婷丁香五月| 天天色色天天| 久久久久9| 色综合99| 色婷婷成人| 国产美女无遮挡裸体毛片A片| 天天插天天射| 亚洲乱码日产精品BD| 丁香五月婷婷五月| 国产日产亚洲系列最新| 疯狂做受XXXX高潮A片| www.seqingwuyuetian| 中文字幕 中文字幕明步| 日韩一级一片内射视频4K| 国产无遮挡又黄又爽免费网站| 五月婷三级片| 久久久.www| 九九99热| 婷婷综合激情| 激情播丁香| 婷婷五月天性| 激情五月婷婷视频一区二区三区| 激情综合网色播五月| 亚洲免费99| 五月丁香影视| www九九免费视频| 日韩五月婷婷久久| 六月婷欧美| 99久久亚洲精品视频| 丁香五月综合久久八| 99久久黄色顶级视频| 亚洲狠狠狠| 五月婷婷亚洲色视频| 五月激情六月宗合| 国产精自产拍久久久久久蜜 | 色婷丁香91| www.yw色| 色五月婷婷五月丁香五月激情五月视频| 丁香五月激情月| 99亚洲无码| 九九伊人网| 国产成人AV| 激情图片99| 婷婷色五月婷婷姐妹| 丁香 婷婷 亚洲 熟女| 丁香激情五月| 日日做A爰片久久毛片A片英语| 91碰免费视频| 超碰99热| 开心五月深爱五月婷| 九月av| 亚洲精品亚洲人成人网| 丁香熟女乱| 久热无码| 夜夜操天天干| 99精品在这里| 五月激情久久| 五月激情丁香五月| 激情五月婷婷开心网| 狠狠色狠狠操| 欧美婷婷九月| 伊人大香五月天| h在线看免费版在线看| 亚洲综合婷婷| 久久婷婷五月综合成人d啪| 精品久久人妻热| www.婷婷,com| 欧美情色一区| 五月婷婷丁香成人网| 99色最新在线视频网站| 在线只有精品| 综合久久六月| 丁香婷婷人妻综合网| 少妇性按摩无码中文A片| 日韩国产在线精品| 成人在线网址| 激情五月天在线视频| 久久9热| 91色呦哟| 婷婷月五天在线在线看| 影音先锋天天日| 中国丰满熟女A片免费观| 97碰超级人人看| 婷婷色丁香六月| 人人爽网| 激情四射五月天偷偷看婷婷| 天堂久久婷婷| 大鸡巴伊人网| 综合网五月天123| 99在线免费观看| 天天综合区| 婷婷五月丁香成人| 夜夜躁爽日日| 激情婷婷五月| 66色在线日韩| 久久女人九九| 五月激情黄色小说| 99精品国产在热久久| 操91| 色色网站| 狼人婷婷综合| 丁香五月在线观看| 亚洲AV无码电影| 天堂婷婷丁香六月网| 少妇2做爰HD韩国电影| 99久热| 26uuu精品一区二区| 国产激情在线| 婷婷丁香花五月天| 人人操操| 狠狠爱婷婷爱| 啪啪黄页网| 精品人妻在线| 偷拍九九热| 乱色色色| 天天久久婷婷| 日韩在线五月天婷婷| 国产精品24r| 99亚洲色| 亚洲天堂有码| 色色色色色色色色网站| 色久一| 超碰1999| 成人永久免费视频在线观看| 激情丁香五月婷婷| 大香蕉五月婷婷| 99热在这里只有精品| 色色婷婷丁香| 激情五月天综合网| 国产裸舞福利资源在线视频| 国产乱子轮XXX农村| 丁香五月激情欧欧美| 99婷婷精品推荐在线视频| www.五月激情.com| 天天干在线播放| 丁香五月婷婷色情综合| 久久99久久久久久久噜噜| 久热69| 婷婷综合色色| 丁香五月影院| 视频这里只有精品16| www.99操| 五月婷婷六月情| www.久久久久| 无人区码一码二码三码医生系列| AV 3P| 韩国97天堂| 久久东京热婷婷五月| 天天干夜夜操A片| 欧美 日韩 人妻 高清 中文| 99热这里只有精品最新网址| 色五月,婷婷大香蕉| www.久久| 五月天色婷婷小说| 涩五月丝袜婷婷| 激情综合色婷婷啪啪六月天| 五月丁香婷婷中文| 久在线88综合| 午夜丁香婷婷| 六月99天天婷婷激情综合| 国产婷婷色综合AV蜜臀AV| 噜噜色婷婷| 东京热人妻一区二区三区在线| 99视频久久| 天天cha成人综合网| 色天堂操| 1000部毛片A片免费观看| 五月天精品综合在线| 五月丁香久久呀| 六月丁香网| 婷婷五月色激情欧美激情| 久久综合激情五月天| 99碰碰。| 五月天色区| 欧美va欧美va差| 精品五月视频婷婷在线观看| WWW色色色COM| 人妻熟妇国产精品| 岛国av电影网站| 國語久久婷| 亚洲AV久久久久久久久久久久久久久久 | 超喷97免费在线视频| 激情99热| 99久久精品网| 99色婷婷| 天天弄天天操| 久久激情五月婷婷| 亚洲夜夜操| WWW.天天日| 狠干综合| 亚洲亚洲人成综合网络| 五月丁香大相交| 99热在线观看这里只有精品| 久久视频这里有精品99| 91精品久久久久、久五月天| 五月色亭丁香| 色综合久久44| 中文成人在线| 欧美日本日韩| 五月婷激情| 综合色播| 区区欧美你爱| 高清成人综合| 99精品综合在线| 色香蕉精品五夜婷| 亚洲99热| 91九色熟女| 色色a| www激情网| 久久这里面只有精品视频| 91超级碰在线| 婷婷五月丁香色播| 嫩草视频。| 亚洲国产精品SUV| 色色国产| 九九久久五月天| 婷婷九月亚洲| 久久婷婷五月综合色丁香| 五月婷婷激清网| 婷婷玉月丁香五月在线视频| 五月天激情四射| 久99久在线| 99日本黄站| 99热热热国产超碰| 婷婷五月a| www.久99| 久久婷婷五月综合色区| 日韩少妇内射免费播放| 91热爆在线| 九九这里只有精品| 色色色图| 99在线小视频| 婷婷 色 丁香 夜| 99免费视频网| 亚洲第79页| 婷婷六月丁| 欧美日韩AAAA| 99视频在线| 国产色色色色| 婷婷五月色天| 99爱视频| 99热只有这里有精品| 激情综合五月天| 91人操| 色偷偷色婷婷| 97人人操人人爽| 操久久网| 免费视频无码| 丰满人妻妇伦又伦精品国产| 99只有精品| 91干婷婷| 婷婷色基地在线看 | 九九热九九| 日本一级一级一级一级| 色色热| 国产午夜精品一区二区三区四区| 五月婷婷六月激情| 日木WWW视频| 337久久| www.yw色| 99热九九这里只有精品| 国产1区2区3区在线观| 精品无码人妻一区| 热久视频| 天天综合网在线| 色婷婷网| 色婷婷综合网| 激情久久久| 色色三级视频| 婷婷九九色| 九色自拍| 五月丁香激情综合欧美| site:ornaments52.com| 开心激情综合| 五月天成人小说| AV电影在线播放| 丁香色情五月综合激情| 天天日天天插天天操| 丁香五月亚洲综合| 五月婷婷啪| 97人人射| 97人碰人操| 丁香五月婷婷99| 激情六月丁香综合| 五月丁香婷婷俺| av在线免费网站 | 日本九九九九| 我爱va亚洲va52| 激情五月天激情小说| 色色激情| 欧美性爱丁香五月| 综合九九久久| 亚洲综合色网站| 丁香五月色| 婷婷五月天色播| 日本操B片| 婷婷五月天成人在线视频| 丁香五月丁香伊人| 久草A片| 色婷婷8| 91碰超| 丁香五月六月激情| 97人人操人人干| av中文字幕免费观看| 五月婷婷黄色| 五月综合婷婷网| 狠狠干在线| 日本黄色一级| 在线综合亚洲欧美65| 99re66热这里只有精品| 色播五月| 国产这里只有精品| 91大屁股精品| 狠狠五月天婷婷激情网。| 五月天亚洲色| 亚洲欧洲中文日韩久久AV乱码| 92国产福利| 精品人妻久久久久久久| 亚洲中文乱字字幕在线永久| AVV黄| 色噜噜狠狠色综合日日| 五月丁香婷婷AV| 狠狠干最新地址| 九九av在线| 婷婷五月六月激情| 五月天综合在线| 久久九九婷婷| 678五月丁香亚洲综合| 99无码视频| 九九亚洲无码| 婷婷五月骚厕所| 一本大道熟女人妻中文字幕在线| 婷婷五月天综合网| 亚洲成人婷婷| 91久女| 影音先锋 91工厂| 婷婷综合| 五月婷婷99热| 97se视频在线| 69天堂99| 国产精品色色色色| 欧美交换配乱吟粗大25P| 午夜激情综合| 丁香五月综合激情性爱 | 激情网第四色| 超碰碰碰碰| 天天狠狠婷婷在线| www.婷婷五月| 色婷婷丁香综合中文字幕| 五月丁香啪啪啪| 天堂网亚洲色图| 久久久精品色色色| 五月婷护士| WWW.开心五月天.COM| 黄桃AV无码免费一区二区三区 | 五月丁香六月色情网欧美| 女人天堂AV| 日日天天天| 777精品久无码人妻蜜桃| 综合久久婷婷| 色久天| 九九人妻福利| 狠狠综合| 五月丁香美女| 天天干,夜夜爽| 六月丁香成人| 五月婷婷激情网| 五月花成人网| 超碰只有精品在线| er99免费视频在线| 激情5月婷婷| 色激情五月|