fwrite和write的区别 fread和fwrite的区别是什么

C\u8bed\u8a00 fwrite()\u548cfprintf\uff08\uff09\u7684\u533a\u522b

fwrite\u662f\u6309\u4e8c\u8fdb\u5236\u5199\u6570\u636e\u5230\u6587\u4ef6\uff0c\u800cfprintf\u662f\u4e25\u683c\u6309\u7167\u53c2\u6570\u91cc\u8fb9\u7684\u683c\u5f0f\u63a7\u5236\u7b26\uff0c\u5199\u6570\u636e\u5230\u6587\u4ef6\u3002\u53ef\u4ee5\u662f\u5341\u8fdb\u5236\uff0c\u4e8c\u8fdb\u5236\uff0c\u5b57\u7b26\u4e32\uff0c\u7b49\u7b49\uff0c\u800c\u4e14\u53ef\u4ee5\u76f4\u63a5\u6253\u5f00\u6587\u4ef6\u67e5\u770b\u6570\u636e\uff0c\u4e8c\u8fdb\u5236\u6587\u4ef6\u662f\u4e0d\u80fd\u76f4\u63a5\u6253\u5f00\u6587\u4ef6\u67e5\u770b\u6570\u636e\u7684\u3002

fwrite\u548cfread\u662f\u4ee5\u8bb0\u5f55\u4e3a\u5355\u4f4d\u7684I/O\u51fd\u6570\uff0cfread\u548cfwrite\u51fd\u6570\u4e00\u822c\u7528\u4e8e\u4e8c\u8fdb\u5236\u6587\u4ef6\u7684\u8f93\u5165\u8f93\u51fa\u3002
fread\u548cfwrite\u7684\u51fd\u6570\u539f\u578b\u5206\u522b\u4e3a\uff1a
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);

fread\u548cfwrite\u51fd\u6570\u7684\u8fd4\u56de\u503c\uff1a
\u8bfb\u6216\u5199\u7684\u8bb0\u5f55\u6570\uff0c\u6210\u529f\u65f6\u8fd4\u56de\u7684\u8bb0\u5f55\u6570\u7b49\u4e8enmemb\uff0c\u51fa\u9519\u6216\u8bfb\u5230\u6587\u4ef6\u672b\u5c3e\u65f6\u8fd4\u56de\u7684\u8bb0\u5f55\u6570\u5c0f\u4e8enmemb\uff0c\u4e5f\u53ef\u80fd\u8fd4\u56de0\u3002


fread\u548cfwrite\u51fd\u6570\u53c2\u6570\u7684\u542b\u4e49\uff1a
\u53c2\u6570size\u6307\u51fa\u4e00\u6761\u8bb0\u5f55\u7684\u957f\u5ea6\uff1b
\u53c2\u6570nmemb\u6307\u51fa\u8981\u8bfb\u6216\u5199\u591a\u5c11\u6761\u8bb0\u5f55\uff0c\u8fd9\u4e9b\u8bb0\u5f55\u5728ptr\u6240\u6307\u7684\u5185\u5b58\u7a7a\u95f4\u4e2d\u8fde\u7eed\u5b58\u653e\uff0c\u5171\u5360size * nmemb\u4e2a\u5b57\u8282\uff1b
ptr\u662f\u6307\u5411\u7684\u67d0\u8fde\u7eed\u5185\u5b58\u7a7a\u95f4\u7684\u6307\u9488\uff1b

stream\u662f\u6587\u4ef6\u6307\u9488\uff1b

fread\u4ece\u6587\u4ef6stream\u4e2d\u8bfb\u51fasize * nmemb\u4e2a\u5b57\u8282\u4fdd\u5b58\u5230ptr\u4e2d\u6240\u6307\u7684\u5185\u5b58\u7a7a\u95f4\u4e2d\uff1b
fwrite\u628aptr\u4e2d\u7684size * nmemb\u4e2a\u5b57\u8282\u5199\u5230\u6587\u4ef6stream\u4e2d\u3002

首先要明白不带缓冲的概念:所谓不带缓冲,并不是指内核不提供缓冲,而是只单纯的系统调用,不是函数库的调用。系统内核对磁盘的读写都会提供一个块缓冲,当用write函数对其写数据时,直接调用系统调用,将数据写入到块缓冲进行排队,当块缓冲达到一定的量时,才会把数据写入磁盘。因此所谓的不带缓冲的I/O是指进程不提供缓冲功能。每调用一次write或read函数,直接系统调用。
而带缓冲的I/O是指进程对输入输出流进行了改进,提供了一个流缓冲,当用fwrite函数网磁盘写数据时,先把数据写入流缓冲区中,当达到一定条件,比如流缓冲区满了,或刷新流缓冲,这时候才会把数据一次送往内核提供的块缓冲,再经块缓冲写入磁盘

fwrite是带缓冲的,write不带缓冲。

举例说明如下:
如果文件的大小是8k。
若用write,且只分配了2k的缓存,则要将此文件读入需要做4次系统调用。
若用fwrite,则系统自动分配缓存,则读入此文件只要一次系统调用。
也就是用write要读4次磁盘,而用fwrite则只要读1次磁盘。所以fwrite的效率比write要高4倍。

另外,如果程序对内存有限制,则用write比较好。
系统调用write的效率取决于用户buff的大小和要写入的总数量,如果buff太小,进入内核空间的次数会增加,效率就低下。而fwrite会自动完成缓存分配任务,减少了实际出现的系统调用,所以效率比较高。

1. 所谓缓冲区,就是一段内存。里面存有内容。fwrite有缓冲,代表当fwrite调用结束之后,它所要求写入文件的内容,可能还有一部分在内存当中,如果要确保写入,需要调用fflush。2. read和write都对应于文件和内存,一个是把文件内容从内存写到文件,另一个是将文件内容读出放入内存。关于为什么还有关于缓冲区,请看第一条。

  • C璇█涓殑read鍜寃rite鎬庝箞鐢?
    绛旓細1.绾犳锛歳ead鍜寃rite鏄疷NIX鎴栬呬竴浜涚被UNIX绯荤粺锛屾瘮濡侺INUX绯荤粺涓娇鐢ㄧ殑锛岀О涓篖INUX绯荤粺鍑芥暟銆傝繖绉嶅嚱鏁板彧鑳藉湪鐗瑰畾鐨勬搷浣滅郴缁熶笅浣跨敤锛屽彲绉绘鎬у樊銆俧read鍜fwrite鏄疌搴撳嚱鏁般傝繖绉嶅嚱鏁板熀鏈湪浠讳綍鎿嶄綔绯荤粺閮借兘浣跨敤锛屽彲绉绘鎬ч珮銆2.鍩虹鐭ヨ瘑浠嬬粛鍙粙缁峀INUX绯荤粺鍑芥暟锛屽父鐢ㄧ殑鏈塩reat,open,close,read,write,lseek,...
  • C++:fstream鏈夌被浼糃璇█涓璮read()鍜fwrite杩欑杩涜鍧楄鍐欑殑鍑芥暟涔,鎴...
    绛旓細鏈夊晩.瑕佽鍐欎簩杩涘埗鏁版嵁鍧楋紝浣跨敤鎴愬憳鍑芥暟read()鍜寃rite()鎴愬憳鍑芥暟锛屽畠浠師鍨嬪涓嬶細read(unsigned char *buf,int num);write(const unsigned char *buf,int num);read()浠庢枃浠朵腑璇诲彇 num 涓瓧绗﹀埌 buf 鎸囧悜鐨勭紦瀛樹腑锛屽鏋滃湪杩樻湭璇诲叆 num 涓瓧绗︽椂灏卞埌浜嗘枃浠跺熬锛屽彲浠ョ敤鎴愬憳鍑芥暟 int gcount();鏉...
  • C璇█涓殑read鍜寃rite鎬庝箞鐢?
    绛旓細1.绾犳锛歳ead鍜寃rite鏄疷NIX鎴栬呬竴浜涚被UNIX绯荤粺锛屾瘮濡侺INUX绯荤粺涓娇鐢ㄧ殑锛岀О涓篖INUX绯荤粺鍑芥暟銆傝繖绉嶅嚱鏁板彧鑳藉湪鐗瑰畾鐨勬搷浣滅郴缁熶笅浣跨敤锛屽彲绉绘鎬у樊銆俧read鍜fwrite鏄疌搴撳嚱鏁般傝繖绉嶅嚱鏁板熀鏈湪浠讳綍鎿嶄綔绯荤粺閮借兘浣跨敤锛屽彲绉绘鎬ч珮銆2.鍩虹鐭ヨ瘑浠嬬粛 鍙粙缁峀INUX绯荤粺鍑芥暟锛屽父鐢ㄧ殑鏈塩reat,open,close,read,write,lseek,...
  • C璇█涓殑read鍜寃rite鎬庝箞鐢?
    绛旓細1.绾犳锛歳ead鍜寃rite鏄疷NIX鎴栬呬竴浜涚被UNIX绯荤粺锛屾瘮濡侺INUX绯荤粺涓娇鐢ㄧ殑锛岀О涓篖INUX绯荤粺鍑芥暟銆傝繖绉嶅嚱鏁板彧鑳藉湪鐗瑰畾鐨勬搷浣滅郴缁熶笅浣跨敤锛屽彲绉绘鎬у樊銆俧read鍜fwrite鏄疌搴撳嚱鏁般傝繖绉嶅嚱鏁板熀鏈湪浠讳綍鎿嶄綔绯荤粺閮借兘浣跨敤锛屽彲绉绘鎬ч珮銆2.鍩虹鐭ヨ瘑浠嬬粛 鍙粙缁峀INUX绯荤粺鍑芥暟锛屽父鐢ㄧ殑鏈塩reat,open,close,read,write,lseek,...
  • c璇█鏂囦欢鎿嶅懡浠(鍑芥暟)鐨勪綔鐢
    绛旓細渚:int handle=open("c:msdos.sys",O_BINARY|O_CREAT|O_WRITE)2.close() 鍏抽棴涓涓彞鏌,鍘熷瀷鏄痠nt close(int handle);濡傛灉鎴愬姛杩斿洖0渚:close(handle)3.lseek() 瀹氫綅鍒版寚瀹氱殑浣嶇疆,鍘熷瀷鏄:long lseek(int handle, long offset, int fromwhere);鍙傛暟offset鏄Щ鍔ㄧ殑閲,fromwhere鏄Щ鍔ㄧ殑鍩哄噯浣嶇疆,鍙栧煎拰鍓嶉潰...
  • c璇█涓庝箞鎶婁竴涓粨鏋勪綋鏁扮粍鍐欏叆鏂囦欢
    绛旓細18, 99.5};fp=fopen( "stu.dat", "wb" ); //b琛ㄧず浠ヤ簩杩涘埗鏂瑰紡鎵撳紑鏂囦欢if( fp == NULL ) //鎵撳紑鏂囦欢澶辫触锛岃繑鍥為敊璇俊鎭瘂printf("open file for write error\n");return -1;}fwrite( &student, sizeof(struct stu), 1, fp ); //鍚戞枃浠朵腑鍐欏叆鏁版嵁fclose(fp);//鍏抽棴鏂囦欢return 0...
  • linux绯荤粺璋冪敤鍜屽簱鍑芥暟璋冪敤鐨勫尯鍒
    绛旓細渚嬪C搴撳嚱鏁fwrite()灏辨槸閫氳繃write()绯荤粺璋冪敤鏉ュ疄鐜扮殑銆傝繖鏍风殑璇濓紝浣跨敤搴撳嚱鏁颁篃鏈夌郴缁熻皟鐢ㄧ殑寮閿锛屼负浠涔堜笉鐩存帴浣跨敤绯荤粺璋冪敤鍛紵杩欐槸鍥犱负锛岃鍐欐枃浠堕氬父鏄ぇ閲忕殑鏁版嵁(杩欑澶ч噺鏄浉瀵逛簬搴曞眰椹卞姩鐨勭郴缁熻皟鐢ㄦ墍瀹炵幇鐨勬暟鎹搷浣滃崟浣嶈岃█)锛岃繖鏃讹紝浣跨敤搴撳嚱鏁板氨鍙互澶уぇ鍑忓皯绯荤粺璋冪敤鐨勬鏁般傝繖涓缁撴灉鍙堢紭浜庣紦鍐插尯鎶鏈...
  • C++ string瀛樺叆浜岃繘鍒舵枃浠堕棶棰
    绛旓細include "fstream.h"void savestr(char*f,char*s,int i){ fstream mf(f,ios::out);mf.write(s,i);mf.close();} void main(){ char a[5] = {(char)0xff,(char)0x34,(char)0x32,(char)0x45,(char)0x67};savestr("a.txt",a,5);} 鏄繖鏍峰悧锛fwrite鍑芥暟鍜宖stream::write閮...
  • fwrite fread澶氱嚎绋嬫搷浣
    绛旓細鍏朵腑锛歠ildes鏄枃浠舵弿杩扮锛沜ommand鏈変笁涓細F_GETLK銆丗_SETLK銆丗_SETLKW flock缁撴瀯浣撳寘鍚互涓嬫垚鍛橈細short l_type short l_whence off_t l_start off_t l_len pid_t l_pid 娉ㄦ剰锛氬鏂囦欢鍖哄煙鍔犻攣涔嬪悗锛屽繀椤讳娇鐢ㄥ簳灞傜殑read銆亀rite璋冪敤鏉ヨ闂枃浠朵腑鐨勬暟鎹紝鍥犱负fwrite銆乫read瀵规暟鎹殑璇...
  • 甯︾紦瀛樺拰涓嶅甫缂撳瓨鐨勫尯鍒
    绛旓細浠 ssize_t write(int filedes, const void *buff, size_t nbytes)鍜宻ize_t fwrite(const void *ptr, size_t size, size_t nobj, FILE *fp)鏉ヨ璁茶嚜宸卞unix绯荤粺涓嬪甫缂撳瓨鐨処/O鍜屼笉甯︾紦瀛樼殑I/O鐨勫尯鍒銆傞鍏堣娓呮涓涓蹇碉紝鎵璋撶殑浠g紦瀛樺苟涓嶆槸鎸囦笂闈袱涓嚱鏁扮殑buff鍙傛暟锛岃屾槸鎸噓nix绯荤粺...
  • 扩展阅读:writeas遥控器上课 ... write wrote written ... xbox series x ... writeas打烂好不好 ... paperpass免费入口 ... php fwrite ... writeas伸缩棒 ... writeas木马 ... writeas网页版入口 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网