1. 程式人生 > >open()與fopen()的區別

open()與fopen()的區別

如題,看到好多呼叫裝置檔案的程式都是用的open函式,難道用fopen不可以嗎?

主要求高手談談這兩個函式的區別,以及具體在什麼時候該用哪個函式?

第 1 樓    tent8()

2006-8-26 17:53:47

得分:2   

fopen是ANSIC標準中的C語言庫函式,在不同的系統中應該呼叫不同的核心api

linux中的系統函式是open,fopen是其封裝函式,個人觀點。僅供參考。

第 2 樓    fytzzh(我愛summer)

2006-8-26 20:12:19

得分:6   

檔案描述符是linux下的一個概念,linux下的一切裝置都是以檔案的形式操作.如網路套接字、硬體裝置等。當然包括操作檔案。

fopen是標準c函式。返回檔案流而不是linux下檔案控制代碼。

第 3 樓    lurenfu(具有中國特色的社會主義初級階段,一百年不變)

2006-8-28 16:27:38

得分:2   

裝置檔案不可以當成流式檔案來用,只能用open

fopen是用來操縱正規檔案的,並且設有緩衝的,跟open還是有一些區別

第 4 樓    grass312(十步殺一人)

2006-8-28 20:03:37

得分:2   

一般用fopen開啟普通檔案,用open開啟裝置檔案

第 5 樓    hjmhjms(大笨汪)

2006-8-29 11:50:44

得分:2   

fopen是標準c裡的,而open是linux的系統呼叫.

他們的層次不同.

fopen可移植,open不能

第 6 樓    cllr(寂寞2001)

2006-8-29 20:13:08

得分:6   

我認為fopen和open最主要的區別是fopen在使用者態下就有了快取,在進行read和write的時候減少了使用者態和核心態的切換,而open則每次都需要進行核心態和使用者態的切換;表現為,如果順序訪問檔案,fopen系列的函式要比直接呼叫open系列快;如果隨機訪問檔案open要比fopen快。

fopen是有緩衝機制的,它使用了FILE這個結構才儲存緩衝資料。   
  open沒有快取機制,每次讀操作都直接從檔案系統中獲取資料。   
  看一下FILE這個結構的定義就知道區別了,FILE包含了一個open返回回來的handle