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函数区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: @Configuration志宇分析
- 下一篇: openLDAP安装经验分享