1. 程式人生 > >檔案描述符fd和檔案指標fp之間的相互轉換

檔案描述符fd和檔案指標fp之間的相互轉換

      Linux/Unix下使用open函式(系統呼叫)開啟檔案會得到檔案描述符fd(int型變數),而使用C庫中的fopen函式開啟檔案則會得到檔案描述符fp(FILE*型變數),二者之間是可以相互轉換的,下面是兩個example。

1.fd轉換為fp

int main(int argc, char *argv[])
{
	FILE *fp = NULL;
	fp  = fopen("/home/super_bert/test.dat", "r");    /*得到檔案指標*/
	if (fp == NULL)
	{
		perror("open file error.");
		exit(1);
	}
	else
	{
		printf("open file successfully...\n");
	}
	
	int fd;
	fd = fileno(fp);	/*檔案指標轉換為檔案描述符*/
	if (-1 == fd)
	{
		perror("fp to fd error.");
	}
	else
	{
		printf("transform successfully...\n")
		exit(1);
	}
	
	return 0;
}
    fileno()函式轉換成功返回檔案描述符fd,失敗時返回-1。

2.fp轉換為fd

int main(int argc, char *argv[])
{
	int  fd;
	fd = open("/home/super_bert/test.dat", O_CREAT|O_RDWR, 0666);	 /*得到檔案描述符*/
	if ( -1 == fd )
	{
		perror("open file error.");
		exit(1);
	}
	else
	{
		printf("open file successfully...\n");
	}
	FILE *fp = NULL;
	fp = fdopen(fd, "r");		/*檔案描述符轉換為檔案指標*/
	if (NULL == fp)
	{
		perror("fd to fp error.");
	}
	else
	{
		printf("transform successfully...\n");
		exit(1);
	}
	
	return 0;
}
      fdopen()轉換成功是返回指向該檔案的檔案指標,失敗返回NULL,錯誤程式碼在巨集errno中。

作者:[email protected]

相關推薦

檔案描述fd檔案指標File* fp的區別轉換

在linux系統中把裝置和普通檔案也都看做是檔案,要對檔案進行操作就必須先開啟檔案,開啟檔案後會得到一個檔案描述符,它是一個很小的正整數,是一個索引值。 核心會為每一個執行中的程序在程序控制塊pcb中維護一個開啟檔案的記錄表,每一個表項都有一個指標指

檔案描述fd檔案指標fp之間相互轉換

      Linux/Unix下使用open函式(系統呼叫)開啟檔案會得到檔案描述符fd(int型變數),而使用C庫中的fopen函式開啟檔案則會得到檔案描述符fp(FILE*型變數),二者之間是可以相互轉換的,下面是兩個example。 1.fd轉換為fp int

linux中檔案描述fd檔案指標flip的理解

整理自:http://www.cnblogs.com/Jezze/archive/2011/12/23/2299861.html簡單歸納:fd(file descriptor)只是一個整數,在open時產生。起到一個索引的作用。每個程序在PCB(Process Control

Linux中檔案描述fb檔案指標FILE*的聯絡與區別

檔案描述符: linux中,當一個程序開啟一個檔案或者是建立一個新檔案時,核心向程序返回一個檔案描述符來標示該檔案。 檔案描述符是一個非負整數,實際上它是一個索引,指向核心為程序所維護的一個檔案記錄表。 任何程式執行起來都會開啟三個預設的流,標準輸入流,標準輸出流,標準錯誤流通

linux中檔案描述fdstruct file結構體的釋放

簡單歸納:fd只是一個整數,在open時產生。起到一個索引的作用,程序通過PCB中的檔案描述符表找到該fd所指向的檔案指標filp。 檔案描述符的操作(如: open)返回的是一個檔案描述符,核心會在每個程序空間中維護一個檔案描述符表, 所有開啟的檔案都將通過此表中的檔

淺談 Linux 下的檔案描述 fd fp

檔案描述符: 是個很小的正整數,它是一個索引值,指向核心為每一個程序所維護的該程序開啟檔案的記錄表。 當某個程式開啟檔案時,作業系統返回相應的檔案描述符,程式為了處理該檔案必須引用此描述符。所謂的檔案描述符是一個低階的正整數。最前面的三個檔案描述符(0,1

Linux中的檔案描述(fd)與開啟檔案之間的關係

1. 概述     在Linux系統中一切皆可以看成是檔案,檔案又可分為:普通檔案、目錄檔案、連結檔案和裝置檔案。檔案描述符(file descriptor)是核心為了高效管理已被開啟的檔案所建立的索引,其是一個非負整數(通常是小整數),用於指代被開啟的檔案,所有執行I/O操作的系統呼叫都通過檔案描

淺談檔案描述12

轉自:http://www.361way.com/filedesc-1-2/5536.html 在linux系統中, 我們知道有 標準輸入 , 標準輸出 , 和標準錯誤, 並且都分別對應著0, 1, 2這三個檔案描述符, 在每個程序誕生之際,就已經隨著伴隨左右,通過以下命令就能看出來:

Linux程式設計--檔案描述fd

    linux中, 每一個程序在核心中,都對應有一個“開啟檔案”陣列,存放指向檔案物件的指標,而 fd 是這個陣列的下標。     我們對檔案進行操作時,系統呼叫,將fd傳入核心,核心通過fd找到檔案,對檔案進行操作。     既然是陣列下標,fd的型別為int, &

Linux基礎IO--檔案描述fd/重定向

在學習檔案描述符之前,我們先來看一點其它相關的知識點。我們都知道,對一個檔案我們可以進行開啟、讀、寫、關閉操作,在我們沒有接觸Linux之前,將資訊輸出到顯示器上,我們通常能想到的方法有以下幾種:#include<stdio.h> #include<stri

c++/c socket應用的區別:socket()函式返回檔案描述fd總是0的問題

最近在arm linux系統上面使用socket建立客戶端到伺服器的連線, 客戶端需要開2個socket連線2個不同的伺服器, 這兩個申請socket的過程都放在同一個類的成員函式中實現, 測試發現,每次拿到的socket的fd均為0。 這個id為0,雖然用起來沒有問題,但

Unix環境程式設計之二:檔案描述、開啟檔案表、v節點關係詳解

一、檔案描述符概念 Linux 系統中,把一切都看做是檔案,當程序開啟現有檔案或建立新檔案時,核心向程序返回一個檔案描述符,檔案描述符就是核心為了高效管理已被開啟的檔案所建立的索引,用來指向被開啟的檔案,所有執行I/O操作的系統呼叫都會通過檔案描述符。 二、檔案

每天進步一點點——Linux中的檔案描述與開啟檔案之間的關係

    在Linux系統中一切皆可以看成是檔案,檔案又可分為:普通檔案、目錄檔案、連結檔案和裝置檔案。檔案描述符(file descriptor)是核心為了高效管理已被開啟的檔案所建立的索引,其是一個非負整數(通常是小整數),用於指代被開啟的檔案,所有執行I/O操作的系統呼叫都通過檔案描述符。程式剛剛啟動的

js中字json數組的相互轉換

pre json 就會 div scrip string json數組 互轉 obj //示例 var a={"name":"tom","sex":"男","age":"24"}; //向數據庫存儲時傳參數a時,直接這樣傳會存為object //json數組轉化為字

Linux:基礎IO(cIO庫函式詳細介紹)(IO系統呼叫介面詳細介紹)(兩者關係:檔案描述檔案指標

目錄 c系統中的庫函式: fopen:開啟檔案 fclose:關閉檔案 fwrite:向檔案寫入一個數據塊 fread:讀寫 fprintf:格式化輸出到一個流/檔案中 fseek:移動/跳轉 到當前 讀取/寫入位置 fgets:獲取字串 fput:把字串寫入到指

Linux下 檔案描述fd)與 檔案指標(FILE*)

一、檔案描述符(fd) 我們都知道在Linux下一切皆檔案。當然裝置也不例外,如果要對某個裝置進行操作,就不得不開啟此裝置檔案,開啟檔案就會獲得該檔案的檔案描述符fd( file discriptor), 它就是一個很小的整數,每個程序在PCB(Process

簡析檔案描述fdFILE結構體的關係

檔案描述符(fd) 檔案描述符(file descriptor)用來訪問檔案。檔案描述符是非負整數。開啟現存檔案或新建檔案時,核心會返回一個檔案描述符。讀寫檔案也需要使用檔案描述符來指定待讀寫的檔案。 通常情況下,將一個程式從硬碟載入到記憶體後,這個程式就化

文件描述fd、文件指針fpvfork()

運行 color 調用exe urn 系統 通用 依賴 使用 src 1.   fd:在形式上是一個非負整數.實際上他是一個索引值、指向kernal為每一個進程所維護的該進程打開文件的記錄表.     當程序打開一個文件或者創建一個新文件的時候kernal向進程返回一個文件

什麼是檔案描述檔案控制代碼?兩者是什麼關係?

在python裡面有這樣一個函式: 網上解釋什麼是,檔案描述符: 核心(kernel)利用檔案描述符來訪問檔案。檔案描述符是非負整數。開啟現存檔案或新建檔案時,核心會返回一個檔案描述符。讀寫檔案也 需要 檔案描述符來指定待讀寫的檔案。 乍一看,怎麼和檔案控制代碼的描述很想,網上搜了一下:

檔案描述開啟檔案

程序級的檔案描述符表 全域性系統級的開啟檔案表 檔案系統級的inode表   檔案描述符表中每一條目都記錄了單個檔案描述符的資訊 控制檔案描述符操作的標誌 close-on-exec 對開啟檔案控制代碼的引用 開啟檔案表中的