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

目錄

1、文件描述符轉換為 FILE 指針

2、FILE 指針轉換為文件描述符


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

  • 文件描述符(fd):由操作系統分配的一個整數標識符,用于標識打開的文件。常用的系統調用包括openreadwriteclose
  • FILE 指針:由C標準庫管理的文件流指針,通過fopenfreadfwritefclose等庫函數操作。

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指針之間轉換,根據需要選擇合適的接口進行文件操作。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/40252.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40252.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40252.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Cesium與Three相機同步(3)

Cesium與Three融合的案例demo <!DOCTYPE html> <html lang"en" class"dark"><head><meta charset"UTF-8"><link rel"icon" href"/favicon.ico"><meta name"viewport" content&q…

C++ 類和對象 構造函數

一 類的6個默認成員函數&#xff1a; 如果一個類中什么成員都沒有&#xff0c;簡稱為空類。 例&#xff1a; #include <iostream> class Empty {// 空類&#xff0c;什么成員都沒有 }; 空類中真的什么都沒有嗎&#xff1f;并不是&#xff0c;任何類在什么都不寫時&a…

洛谷 P1035 [NOIP2002 普及組] 級數求和

本文由Jzwalliser原創&#xff0c;發布在CSDN平臺上&#xff0c;遵循CC 4.0 BY-SA協議。 因此&#xff0c;若需轉載/引用本文&#xff0c;請注明作者并附原文鏈接&#xff0c;且禁止刪除/修改本段文字。 違者必究&#xff0c;謝謝配合。 個人主頁&#xff1a;blog.csdn.net/jzw…

qt 讀取配置文件

在Qt中讀取配置文件&#xff0c;主要有以下幾種方法&#xff1a; 使用QFile和QTextStream類&#xff1a; 這種方法適用于讀取任意文本文件&#xff0c;包括配置文件。使用QFile的open()方法打開配置文件。使用QTextStream的readLine()方法逐行讀取配置數據。使用QXmlStreamRea…

谷粒商城學習-筆記大全

1&#xff0c;谷粒商城-01-項目介紹 2&#xff0c;谷粒商城筆記-02-項目整體效果展示 3&#xff0c;谷粒商城筆記-03-分布式基礎概念 4&#xff0c;谷粒商城筆記-04-項目微服務架構圖簡介 5&#xff0c;谷粒商城學習筆記-05-項目微服務劃分圖 6&#xff0c;谷粒商城學習-06-使用…

【LinuxC語言】手撕Http協議之accept_request函數實現(一)

文章目錄 前言accept_request函數作用accept_request實現解析方法根據不同方法進行不同操作http服務器響應格式unimplemented函數實現總結前言 在計算機網絡中,HTTP協議是一種常見的應用層協議,它定義了客戶端和服務器之間如何進行數據交換。在這篇文章中,我們將深入探討Li…

C++模塊化之內部類

目錄 1.引言 2.內部類的訪問控制 3.優缺點分析 4.實際運用 4.1.實現復雜數據結構 4.2.封裝細節實現 4.3.事件處理和回調 4.4.模板元編程輔助類 4.5. 訪問控制和封裝 4.6. 代碼組織和模塊化 5.總結 1.引言 在C中&#xff0c;內部類&#xff08;Nested Class&#xff…

力扣爆刷第159天之TOP100五連刷61-65(翻轉單詞、對稱二叉樹、遍歷求和)

力扣爆刷第159天之TOP100五連刷61-65&#xff08;翻轉單詞、對稱二叉樹、遍歷求和&#xff09; 文章目錄 力扣爆刷第159天之TOP100五連刷61-65&#xff08;翻轉單詞、對稱二叉樹、遍歷求和&#xff09;一、151. 反轉字符串中的單詞二、129. 求根節點到葉節點數字之和三、104. 二…

簡單解讀倫敦銀CFD(XAG)走勢圖

從本質上說&#xff0c;倫敦銀是一種差價合約&#xff08;CFD&#xff09;交易&#xff0c;在同平臺所提供的MT4中&#xff0c;它的代碼也許并不一樣&#xff0c;有的平臺會顯示為XAG&#xff0c;有的平臺會顯示為LLS或Silver&#xff0c;但它們指的其實是同一個品種&#xff0…

Python學習筆記29:進階篇(十八)常見標準庫使用之質量控制中的數據清洗

前言 本文是根據python官方教程中標準庫模塊的介紹&#xff0c;自己查詢資料并整理&#xff0c;編寫代碼示例做出的學習筆記。 根據模塊知識&#xff0c;一次講解單個或者多個模塊的內容。 教程鏈接&#xff1a;https://docs.python.org/zh-cn/3/tutorial/index.html 質量控制…

基于單片機的防酒駕控制系統設計

摘 要&#xff1a; 酒后駕車的危害十分巨大&#xff0c;因此&#xff0c;筆者介紹了一種基于單片機的防酒駕控制系統。系統由酒精傳感器 MQ-3測量汽車駕駛員體內的酒精含量濃度&#xff0c;通過 A/D 轉換器轉換成數字信號傳給單片機&#xff0c;經過單片機處理后顯示酒精濃度&a…

c++11新特性-6-using

文章目錄 using1.定義別名 using 1.定義別名 1.1 定義類型別名 using t int; 1.2 定義函數指針 int test(double,string){}//返回值類型 int &#xff0c;參數類型&#xff1a;double string using func int(*) (double,string);int main() {func f test;f(10.5,“hello…

算法訓練營day69

查并集&#xff1a;107. 尋找存在的路徑 (kamacoder.com) #include<iostream> #include<vector>using namespace std;vector<int> father(101, 0);void init() {for(int i 1;i < 101;i) {father[i] i;} }int find(int v) {if(v father[v]) return v;e…

老年生活照護實訓室:為養老服務業輸送專業人才

本文探討了老年生活照護實訓室在養老服務業專業人才培養中的關鍵作用。通過詳細闡述實訓室的功能、教學實踐、對學生能力的培養以及面臨的挑戰和解決方案&#xff0c;強調了其在提升人才素質、滿足行業需求方面的重要性&#xff0c;旨在為養老服務業的可持續發展提供有力的人才…

electron教程(二)控制應用程序的事件生命周期

1.will-finish-launching 當應用程序完成基礎的啟動的時候被觸發&#xff0c;在 Windows 和 Linux 中, will-finish-launching 事件與 ready 事件是相同的; 在 macOS 中&#xff0c;這個事件相當于 NSApplication 中的 applicationWillFinishLaunching 提示。 app.on(will-fi…

Butterfly主題文章標題改成轉動小風車

效果 標題級別不同小風車顏色不同&#xff0c;鼠標移入會有轉動變慢及變色效果。 新建css 建議在/source下創建諸如img/css/js等文件夾&#xff0c;存放文章或網站用的素材&#xff0c;分門別類后續也方便維護。 Hexo打包的時候&#xff0c;會自動把/source下的文件&#…

深度神經網絡語言識別

「AI秘籍」系列課程&#xff1a; 人工智能應用數學基礎人工智能Python基礎人工智能基礎核心知識人工智能BI核心知識人工智能CV核心知識 使用 DNN 和字符 n-gram 對一段文本的語言進行分類&#xff08;附 Python 代碼&#xff09; 資料來源&#xff0c;flaticon&#xff1a;htt…

AI繪畫如何變現賺取副業收入?保姆級AI繪畫SD和MJ副業實操教程建議收藏!

hi~大家好&#xff0c;我是向陽。 今天給大家分享一下我是如何通過AI繪畫賺到一點小錢的&#xff01; 副業做個人IP&#xff0c;某書&#xff0c;專注Midjourney &#xff0c;深入 AI頭像制作&#xff0c;小某書做了500頭像&#xff0c;變現了差不多一萬元&#xff0c;每日短…

[qt][C++]object.h(448): error C2238: 意外的標記位于“;”之前

問題場景&#xff1a;此問題多發生在qt調用python.h&#xff0c;比如matplotlib-cpp等需要python引用的C庫 #include <Python.h>報錯 \python\python37-32\include\object.h(448): error C2059: 語法錯誤:“;” \python\python37-32\include\object.h(448): error C223…