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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

open函数和fopen函数区别

發布時間:2024/3/26 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 open函数和fopen函数区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

fopen是基于ANSIC標準C的的API

open是UNIX系統的API的區別

這里重點運用fopen等ANSIC標準C的的API,open等UNIX系統的API可參考主頁文章

1.層次不同
open是系統調用,返回的是文件句柄,文件的句柄是文件在文件描述副表里的索引,
fopen是ANSIC標準中的C語言庫函數,返回的是一個指向文件結構的指針)。在不同的系統中應該調用不同的內核api。linux中的系統函數是open,fopen是其封裝函數,fopen的實現要調用open。標準C庫.
2.fopen和open最主要的區別是是否有緩存
fopen用戶態下就有了緩存,它使用了FILE這個結構保存緩沖數據。在進行read和write的時候減少了用戶態和內核態的切換。
open沒有緩存,每次讀操作都直接從文件系統中獲取數據。在進行read和write的時候每次都需要進行內核態和用戶態的切換。
表現為,如果順序訪問文件,fopen系列的函數要比直接調用open系列快;如果隨機訪問文件open要比fopen快。
3.一般用fopen打開普通文件,用open打開設備文件。

fopen函數原型和頭文件

?

#include <stdio.h>FILE *fopen(const char *path, const char *mode);

返回值:fopen函數返回新打開文件的文件指針;如果此文件不能打開,則返回NULL指針。

參數:path: 要打開的文件路徑
? ? ? ? ? ?mode: 訪問文件的模式, 它包括:

?

代碼實現

#include <stdio.h>#include <string.h>int main() {//FILE *fopen(const char *path, const char *mode);FILE *fp;char *str="zhengyanfeng handsome";char readBuf[128]={0};fp=fopen("./zheng.txt","w+");//size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);//ptr buf//size sizeof char//geshu//which filefwrite(str,sizeof(char),strlen(str),fp);fseek(fp,0,SEEK_SET);// fwrite(str,sizeof(char)*strlen(str),1,fp);//size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);fread(readBuf,sizeof(char)*strlen(str),1,fp);printf("read data:%s\n",readBuf);return 0; }

總結

以上是生活随笔為你收集整理的open函数和fopen函数区别的全部內容,希望文章能夠幫你解決所遇到的問題。

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