open函数和fopen函数区别
fopen是基于ANSIC標(biāo)準(zhǔn)C的的API
open是UNIX系統(tǒng)的API的區(qū)別
這里重點(diǎn)運(yùn)用fopen等ANSIC標(biāo)準(zhǔn)C的的API,open等UNIX系統(tǒng)的API可參考主頁(yè)文章
1.層次不同
open是系統(tǒng)調(diào)用,返回的是文件句柄,文件的句柄是文件在文件描述副表里的索引,
fopen是ANSIC標(biāo)準(zhǔn)中的C語(yǔ)言庫(kù)函數(shù),返回的是一個(gè)指向文件結(jié)構(gòu)的指針)。在不同的系統(tǒng)中應(yīng)該調(diào)用不同的內(nèi)核api。linux中的系統(tǒng)函數(shù)是open,fopen是其封裝函數(shù),fopen的實(shí)現(xiàn)要調(diào)用open。標(biāo)準(zhǔn)C庫(kù).
2.fopen和open最主要的區(qū)別是是否有緩存
fopen用戶態(tài)下就有了緩存,它使用了FILE這個(gè)結(jié)構(gòu)保存緩沖數(shù)據(jù)。在進(jìn)行read和write的時(shí)候減少了用戶態(tài)和內(nèi)核態(tài)的切換。
open沒(méi)有緩存,每次讀操作都直接從文件系統(tǒng)中獲取數(shù)據(jù)。在進(jìn)行read和write的時(shí)候每次都需要進(jìn)行內(nèi)核態(tài)和用戶態(tài)的切換。
表現(xiàn)為,如果順序訪問(wèn)文件,fopen系列的函數(shù)要比直接調(diào)用open系列快;如果隨機(jī)訪問(wèn)文件open要比f(wàn)open快。
3.一般用fopen打開普通文件,用open打開設(shè)備文件。
fopen函數(shù)原型和頭文件
?
#include <stdio.h>FILE *fopen(const char *path, const char *mode);返回值:fopen函數(shù)返回新打開文件的文件指針;如果此文件不能打開,則返回NULL指針。
參數(shù):path: 要打開的文件路徑
? ? ? ? ? ?mode: 訪問(wèn)文件的模式, 它包括:
?
代碼實(shí)現(xiàn)
#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; }總結(jié)
以上是生活随笔為你收集整理的open函数和fopen函数区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: @Configuration志宇分析
- 下一篇: openLDAP安装经验分享