2010-07-02 40 views
129

我有一個FILE *,通過向fopen()的調用返回。我需要從中獲取文件描述符,以便在其上撥打電話fsync(fd)。從文件指針獲取文件描述符有什麼功能?如何將文件指針(FILE * fp)轉換爲文件描述符(int fd)?

+7

自答案在這個「危險」的形式鼓勵。 – dmckee 2010-07-02 23:18:32

+0

或者你可以打開與開放(2),你將有一個文件描述符從開始 – 2013-06-29 16:13:34

+6

和逆文件:如何從一個文件描述符文件指針?](http://stackoverflow.com/問題/ 1941464 /如何到獲得-A-文件指針從-A-文件描述符) – 2013-10-01 20:35:54

回答

168

的正確功能是int fileno(FILE *stream)。它可以在<stdio.h>可以找到,並且是POSIX標準,但也不是標準C.

+4

嚴格來說,不會有任何需要提及任何標題或庫如果函數的標準確實是一個部分C庫。然而,這不是標準的,這就是爲什麼至少提到標題是有意義的。在標準C庫 – AnT 2010-07-02 23:55:06

+16

訪問功能確實需要包括標題,至少如果你的編譯器期望原型(我從來不記得什麼是真正的標準行爲在這方面)。如果沒有標題,則不會在C文件的開頭定義名稱。 – Novelocrat 2010-07-03 00:20:16

+0

@Novelocrat:我不是說沒有必要包含任何東西。我只是表示,爲*標準*函數找到適當的頭文件名總是很容易的。即在答案中提及確切的標題名稱並不重要。 – AnT 2010-07-03 01:51:43

27

即使fileno(FILE *)可能會返回一個文件描述符,要非常小心,不要繞過標準輸入輸出的緩衝區。如果存在緩衝區數據(讀取或未刷新寫入),則從文件描述符讀取/寫入可能會給您帶來意想不到的結果。

要回答的問題一邊一個,一個文件描述符轉換爲一個文件指針,使用fdopen(3)

+0

我不認爲這對專門尋找這個問題的人有幫助,而且這已經在OP撰寫之前一個月的OP的評論部分得到了回答。這更多的是與真實信息相對立的邏輯澄清。 – kevr 2018-02-01 15:03:42

相關問題