博客專欄

        EEPW首頁 > 博客 > Linux文件描述符與FILE指針互相轉換

        Linux文件描述符與FILE指針互相轉換

        發布人:美男子玩編程 時間:2024-07-29 來源:工程師 發布文章

        在Linux中,文件描述符(file descriptor, fd)和FILE指針(也稱為文件流指針,FILE pointer)是兩種常見的文件操作接口。文件描述符是一個整數,通過系統調用直接操作文件,而FILE指針是通過C標準庫函數操作文件。


        • 文件描述符(fd)

          由操作系統分配的一個整數標識符,用于標識打開的文件。

          常用的系統調用包括open、read、write、close。

        • FILE 指針

          C標準庫管理的文件流指針,通過fopen、fread、fwrite、fclose等庫函數操作。


        1


        文件描述符轉換為 FILE 指針

        使用fdopen函數可以將一個已經打開的文件描述符轉換為FILE指針。


        函數原型如下所示:



        FILE *fdopen(int fd, const char *mode);


        • 參數

          • fd:文件描述符。

          • mode:打開模式,與fopen類似,如"r"、"w"、"a"等。

        • 返回值成功返回指向FILE對象的指針,失敗返回NULL。


        示例如下:


        #include <stdio.h>#include <unistd.h>#include <fcntl.h> int main() {    // 打開一個文件并獲得文件描述符    int fd = open("example.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);    if (fd == -1) {        perror("Failed to open file");        return 1;    }     // 將文件描述符轉換為 FILE 指針    FILE *file = fdopen(fd, "w");    if (file == NULL) {        perror("Failed to convert fd to FILE*");        close(fd);        return 1;    }     // 使用 FILE 指針進行寫操作    fprintf(file, "Hello, FILE pointer!n");     // 關閉 FILE 指針,注意這也會關閉文件描述符    fclose(file);     return 0;}

        2


        FILE 指針轉換為文件描述符

        使用fileno函數可以從一個FILE指針中獲取對應的文件描述符。


        函數原型如下所示:



        int fileno(FILE *stream);


        • 參數


          • stream:指向FILE對象的指針。

        • 返回值返回文件描述符,如果出錯返回-1。


        示例如下:


        #include <stdio.h> int main() {    // 打開一個文件并獲得 FILE 指針    FILE *file = fopen("example.txt", "w");    if (file == NULL) {        perror("Failed to open file");        return 1;    }     // 從 FILE 指針中獲取文件描述符    int fd = fileno(file);    if (fd == -1) {        perror("Failed to convert FILE* to fd");        fclose(file);        return 1;    }     // 使用文件描述符進行寫操作    const char *text = "Hello, file descriptor!n";    if (write(fd, text, strlen(text)) == -1) {        perror("Failed to write to file");    }     // 關閉 FILE 指針,這也會關閉文件描述符    fclose(file);     return 0;}


        注意事項

        • 文件描述符和 FILE 指針的關聯

          fdopen函數返回的FILE指針和原始文件描述符是關聯的。

          對FILE指針的操作會影響文件描述符,反之亦然。

        • 關閉文件

          使用fclose關閉FILE指針時,底層文件描述符也會被關閉。

          因此,不要在關閉FILE指針后再次使用該文件描述符。

        • 緩沖問題

          FILE指針使用標準庫緩沖機制,文件描述符直接操作文件。

          混合使用這兩者時需要注意緩沖區的刷新問題,以避免數據不一致。


        通過上述示例和說明,可以在Linux程序中靈活地在文件描述符和FILE指針之間轉換,根據需要選擇合適的接口進行文件操作。

        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: Linux FILE指針

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 阿尔山市| 鄂州市| 宁陕县| 柳林县| 静乐县| 铜梁县| 莱芜市| 蕉岭县| 佛学| 庄河市| 宁化县| 峡江县| 武冈市| 五莲县| 海宁市| 旌德县| 苍南县| 承德市| 墨玉县| 乐都县| 神农架林区| 浪卡子县| 崇州市| 宁国市| 印江| 林芝县| 淮南市| 西城区| 广水市| 阿合奇县| 平江县| 海晏县| 汉沽区| 莱阳市| 那曲县| 洮南市| 龙山县| 桂东县| 开阳县| 红河县| 江川县|