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