導航:首頁 > 操作系統 > fopenopenlinux

fopenopenlinux

發布時間:2023-05-25 08:35:16

linux 中 open和fopen的區別

在 C 語言中,open()、read()、write()、close() 函數是對一個二進制文件(或者文本文件)進行的低級操作函數;而fopen()、fread()、fwrite()、fclose() 函數是對一個二進制文件(或者文本文件)進行的高級操作函數。具體的函數參數如何寫法,你可以參考 C 語言庫函數的相關文檔。通常情況下,如果要處理的數據比較大的話,低級操作肯定要比高級操作在速度上要快得多。

㈡ linux用什麼標識,描述和控制文件

Linux的文件標識符,和Windows的就是文件名不同,它相當於文件的一個指針。在linux的C語言中,除了用通用的《【C】文件讀寫問題》(點擊打開鏈)中介紹過的fopen等c語言通用操作文件以外,其Linux應用請參考《【Linux】利用C語言文件流復制單一文件),還能用文件標識符還來操作文件。這也是Linux中C語言,最底層,最原始控制文件的方式,其函數open,read,write,close已經完美地表明這一點。同時,在Linux無論是文件、設備和管道,甚至是個可操作對象對可以視作文件來對待,具體表現為都可以用這個文件標識符困歲春來操作他們。
文件標識符非常獨特,並不是指針,其變數類型就是大家非常常用的int。
至於這個東西怎麼用,具體請看如下文件讀寫程序:

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>//文件控制
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAXSIZE 512//緩沖區的大小
const char* FILEPATH="/tmp/file.txt";//文件目錄
int main(void) {
int fd;//文件標識符,
char *s = "被折騰的文字";
char buffer[MAXSIZE+1];//用來接字元的緩沖區
int size;//讀入的文件長度
if((fd=open(FILEPATH,O_CREAT|O_TRUNC|O_RDWR,0777))<0){
//O_CREAT如果指定文件不存在,則創建這個文件,O_EXCL如果要創建的文件已存在,則返回 -1,並且修改 errno 的值
//O_APPEND每次寫操作都寫入文件的末尾,O_TRUNC如果文件存在,並且以只寫/讀寫方式打開,則清空文件全部內容
//O_RDONLY只讀模式,O_WRONLY只寫模式,O_RDWR讀寫模式
//0777為最高許可權
perror("打開文件失敗!");
exit(1);
}
if((write(fd,s,strlen(s)))<0){
perror("寫入文件失敗!");
exit(1);
}
//lseek(fd,0,SEEK_SET);//即把文件指針移至buf文件的開始處
lseek(fd,-strlen(s),SEEK_END);//即把文件指針往從結尾處向前移動strlen(s)個字元
if((size=read(fd,buffer,MAXSIZE))<0){
perror("讀入文件失敗!");
exit(1);
}else{
buffer[size]='\0';//字元串數組封口
printf("%s\n",buffer);
}
if(close(fd)<0) {
perror("關鍵文件失敗!");
exit(1);
}
unlink(FILEPATH);//刪除文件
exit(0);
}
這個程序的一大堆頭文件,是沒辦法的,因為所用到的函數需要的基本頭文件就是這么多,但這些頭文件都是Linux的基本頭文件,能夠拿來直接用。

程序首先打開並同時利用open的參數創建一個文件,之後向這個文件,通過read函數寫入一個名為「緩沖區」buffer的字元數組,也就是字元串string的一些東西,然後,寫入完畢,因為文件操作游標將會移到文件最後,所以我們要先將其移迴文件頭,再利用write函數讀入這個文件的內容到buffer,並列印到屏幕,最後再用close關閉文件標識符與文件的連接,並利用unlink刪除這個文件,如果沒有close,unlink將不起作用,因為這個程序正在佔用這個/tmp/file.txt,無法刪除,如果要強制刪除可以考慮remove函數。
所以,上述代碼的運行結果如下圖:

最後雀橘,這個文件自然是要被刪除的了,肯定是沒有的:

上述程序很簡單,但我們更多應該關注這里文件標識符汪耐的作用。fd這個int就是文件標識符,相當於FILE *的作用,但他就是一個int。實質上,這個int非常獨特,同open函數,int fd裡面存著要被操作文件的地址,但它卻又不是int *,之後的write和read函數都要根據這個fd所指明的方向來,你可以發現write,read參數都有一個地方,填入了fd,可要求填入的,卻是一個int變數,這在windows裡面是沒有的,同時不了解文件標識符的人,看到write和read的使用可能是雲里霧里的,之後的close就更不用說了,就是清楚這個fd與被操作文件的關聯關系。
unlink函數則和文件標識符無關,需要一個文件路徑的參數。

㈢ linux下 對文件的 操作,用fopen fread,fwrite等,還是用open read,write哪個更好呢

上面幾位都說到點子上了,fopen系的函數是C標准庫的函數中操作文件流的函數(有緩沖)頭文件stdio.h,open系的函數是posix規范的介面,沒緩沖,頭文件估計是io.h還是unistd.h我記不到了。返回值不一樣(一個結構體指針一個int)然後就是open系的可以做更多的事,但fopen移植性好。這個看你的需求來用,順便一提,win下mingw支持很多posix的函數(但至少fork,exec不支持,spawn倒是支持)

㈣ open和fopen的區別

open和fopen的區別:
1.緩沖文件系統
緩沖文件系統的特點是:在內存開辟一個「緩沖區」,為程序中的每一個文件使用,當執行讀文件的操作時,從磁碟文件將數據先讀入內存「緩沖區」, 裝滿後再從內存「緩沖區」依此讀入接收的變數。執行寫文件的操作時,先將數據寫入內存「緩沖區」,待內存「緩沖區」裝滿後再寫入文件。由此可以看出,內存 「緩沖區」的大小,影響著實際操作外存的次數,內存「緩沖區」越大,則操作外存的次數就少,執行速度就快、效率高。一般來說,文件「緩沖區」的大小隨機器 而定。
fopen, fclose, fread, fwrite, fgetc, fgets, fputc, fputs, freopen, fseek, ftell, rewind等
2.非緩沖文件系統
緩沖文件系統是藉助文件結構體指針來對文件進行管理,通過文件指針來對文件進行訪問,既可以讀寫字元、字元串、格式化數據,也可緩埋襲以讀寫二進制數 據。非緩沖文件系統依賴於操作系統,通過操作系統的功能對文件進行讀寫,是系統級的輸入輸出,它不設文件結構體指針,只能讀寫二進制文件,但效率高、速度 快,由於ANSI標准不再包括非緩沖文件系統,因此建議大家最好不要選擇它。本書只作簡單介紹。open, close, read, write, getc, getchar, putc, putchar 等。
open 是系統調用 返回的是文件句柄,文件的句柄是文件在文件描述副表裡的索引,fopen是C的庫函數,返回的是一個指向文件結構的指針。
fopen是ANSIC標准中的C語言庫函數,在不同的系統中應該調用不同的內核api
linux中的系統函數是open,fopen是其封裝函數,個人觀點。僅供參考。
文件描述符是linux下的一個概念,linux下的一切設備都是以文件的形式操作.如網路套接字、硬體設備等。當然包括操作文件。
fopen是標准c函數。返迴文件流而不是linux下文件句柄。
設備文件不可以當成流式文件來用,只能用open
fopen是用來操縱正規文件的,並且設有緩沖的,跟open還是有一些區別
一般用fopen打開普通文件,用open打開設備文件
fopen是標准c里的,而open是linux的系統調用.
他們的層次不同.
fopen可移植,open不能
我認為fopen和open最主要的區別是fopen在用戶態下就有了緩擾兄存,在進行read和write的時候減少了用戶態和內核態的切換,而open則每次都需要進行內核態和用戶態的切換;表現為,如果順序訪問文件,fopen系列的函數要比直接調用open系列快;如果隨機訪問文件open要比fopen快。
來自論壇的經典回答:
前者屬於低級IO,後者是高級IO。
前者返回一個文件描述符(用戶程序區的),後者返回一液返個文件指針。
前者無緩沖,後者有緩沖。
前者與 read, write 等配合使用, 後者與 fread, fwrite等配合使用。
後者是在前者的基礎上擴充而來的,在大多數情況下,用後者。

㈤ linux系統中,對普通文件的操作,關於對fopen和open的區別

這個是位或,不是與。位或、位與是這樣計算的。 如:二進制的 010 001 結果是 011,而 010 & 001 結果就是0了。 O_WRONLY 和 O_CREAT 的關系就相當於上面的 010 和 001。他們位或的值不是0,位與的值就是0了。0表示什麼都不做。用了位或後,就在一個整型的值上設置了不同的標志位,open函數會檢測對應的標志位,如果該標志位設置為1了,就執行對應的操作。 O_CREAT的意思就是創建的意思,在這里就是將 創建文件 的標志位設置為1,這樣open函數無法寫這個文件的時候就會創建他。

㈥ linux 中 open和fopen的區別

Linux中open與fopen區別如下:

1、來源

從來源的角度看,兩者能很好地區分開,這也是最顯而易見的區別:

①open是Unix系統調用函數,返回的是文件描述符,它是文件在文件描述符表裡的索引;

②fopen是ANSIC標准中的C語言庫函數,在不同的系統中應該調用不同的內核api。返回的是一個指向文件結構的指針。

2、移植性

這一點從上面的來源可以推斷出來,fopen是C標准函數,因此擁有良好的移植性,而open是Unix系統調用,移植性有限。如Windows下相似的功能使用API函數CreateFile。

3、適用范圍

①open返迴文件描述符,而文件描述符是Unix系統下的一個重要概念,Unix下的一切設備都是以文件的形式操作。如網路套接字、硬體設備等。當然包括操作普通正規文件。

②fopen是用來操縱普通正規文件。

4、文件IO層次

如果從文件IO的角度來看,前者屬於低級IO函數,後者屬於高級IO函數。低級和高級的簡單區分標準是:誰離系統內核更近。低級文件IO運行在內核態,高級文件IO運行在用戶態。

㈦ linux 中 open和fopen的區別

open 是系統調用 返回的是文件句柄,文件的句柄是文件在文件描述副表裡的索引,fopen是C的庫函數,返回的是一個指向文件結構的指針。

fopen是ANSIC標准中的C語言庫函數,在不同的系統中應該調用不同的內核api
linux中的系統函數是open,fopen是其封裝函數

open和fopen的區別:

1、open屬於低級IO,fopen是高級IO。

2、open返回一個文件描述符,fopen返回一個文件指針。

3、open無緩沖,fopen有緩沖。

4、open與 read, write 等配合使用, fopen與 fread, fwrite等配合使用。

5、fopen是在open的基礎上擴充而來的,在大多數情況下,用fopen。

㈧ linux open和fopen的區別

您好,請問您是想知道linux open和fopen的區別嗎?

㈨ c語言 文件讀入什麼意思

文件讀入就是將硬碟上的數據讀到內存者鉛中。我們開始寫程序時,每次罩讓程序啟動時都是一樣首悶好的;當我們把程序上次運行結果保存到文件中,下次啟動時讓程序讀這個文件,就可以把程序上次執行的結果反映在你的程序鍾了。
學到後來,我們會學到資料庫。這是人家把各種文件的操作更加抽象化給你來用,這樣可以處理大批的數據。
總之,文件是程序記憶性的基礎。

㈩ linux中,使用fopen函數打開文件失敗

你可以看下,在另一個目錄的文件你是否有訪問許可權,同一個目錄下一般來說,你把他復制過來,這個文件的擁有者(owner)就是你了,你是肯定可以訪問的。每個程序都有一個當前目錄的環境變數,你在shell中執行程序時,shell程序就是你執行的程序的父進程,你的程序從shell程序中繼承了當前目錄,所以你只給定文件名時,當然打開的就是當前目錄下的文件了

閱讀全文

與fopenopenlinux相關的資料

熱點內容
51單片機課程設計課題 瀏覽:895
手機淘寶登錄怎麼加密碼 瀏覽:481
linux快捷方式圖標 瀏覽:35
陽光車險的app叫什麼名字 瀏覽:461
購買單片機的器件時需要給商家啥 瀏覽:534
並行編譯技術的發展 瀏覽:549
阿里雲伺服器安裝管理 瀏覽:550
java手機開發教程 瀏覽:674
我的世界怎麼刪除伺服器數據 瀏覽:671
linux內存子系統 瀏覽:972
加密思維幣 瀏覽:690
魅族訪客文件夾 瀏覽:52
添加的文件夾怎麼找 瀏覽:617
程序員涉黃 瀏覽:700
maven編譯resources下的js 瀏覽:521
ubuntu文件移動命令 瀏覽:229
安卓i怎麼查找蘋果手機 瀏覽:951
雲伺服器宕機概率 瀏覽:232
在線買葯用什麼app知乎 瀏覽:815
ubuntu解壓xz文件 瀏覽:676