Linux | 標準IO編程

Linux | 標準IO編程


時間2024年6月8日23:03:43

文章目錄

  • `Linux` | 標準`IO`編程
    • 1.標準`IO`編程
      • 1-1.流的打開
      • 1-2.流的關閉
      • 1-3.錯誤處理
        • 函數原型perror
          • 參數
          • 功能
          • 返回值
          • 使用示例
          • 注意事項
          • 額外信息
        • 函數原型strerror
          • 參數
          • 返回值
          • 使用示例
          • 注意事項
          • errno 變量
          • 總結
      • 1-4.流的讀寫
        • 1-4-1.按字符(字節)輸入/輸出
          • 實例
        • 1-4-2.按行輸入/輸出
        • 1-4-3.以指定大小為單位讀寫文件
      • 1-5.流的定位
        • fseek()函數
      • 函數原型
      • 參數說明
        • 示例 2:將文件指針從當前位置向后移動 100 個字節
      • 注意事項
        • ftell()函數
      • 函數原型
      • 參數說明
      • 返回值
      • 示例和用法
        • 示例 1:讀取文件并輸出當前位置
        • 示例 2:只獲取文件大小(不是標準方法,但可以用作簡單示例)
      • 注意事項
      • 1-6.格式化輸入輸出
        • 格式化輸入函數
        • 格式化輸出函數

1.標準IO編程

1-1.流的打開

fopen 是 C 語言中用于打開文件的標準庫函數。它屬于 <stdio.h> 頭文件,并用于創建或打開一個文件,以便進行后續的文件讀寫操作。

函數的原型通常如下:

FILE *fopen(const char *filename, const char *mode);

參數說明:

  • filename:要打開或創建的文件的名稱(包括路徑,如果需要的話)。

  • mode:一個字符串,指定了文件的打開模式。這些模式可以是以下值之一或它們的組合(注意,并非所有組合都是有效的):

    • "r":以只讀方式打開文件。文件必須存在。
    • "w":以寫入方式打開文件。如果文件不存在,則創建它;如果文件存在,則其內容被截斷為零長度。
    • "a":以追加模式打開文件。如果文件不存在,則創建它;如果文件存在,則寫入的數據會被追加到文件的末尾。
    • "r+":以讀寫方式打開文件。文件必須存在。
    • "w+":以讀寫方式打開文件。如果文件不存在,則創建它;如果文件存在,則其內容被截斷為零長度。
    • "a+":以讀寫方式打開文件用于追加。如果文件不存在,則創建它;如果文件存在,則寫入的數據會被追加到文件的末尾。
    • "b":二進制模式(可以與上述模式組合使用,如 "rb""wb+")。在 Windows 系統上,當以文本模式打開文件時,\n 會被轉換為 \r\n,而在讀取時,\r\n 會被轉換為 \n。在二進制模式下,這種轉換不會發生。

返回值:

  • 如果文件成功打開,fopen 返回一個指向 FILE 對象的指針,該對象可用于后續的文件操作。
  • 如果文件打開失敗,fopen 返回 NULL

示例:

#include <stdio.h>int main() {FILE *file = fopen("example.txt", "w");if (file == NULL) {printf("Failed to open file\n");return 1;}fprintf(file, "Hello, World!\n");fclose(file);return 0;
}

在這個示例中,我們試圖以寫入模式(“w”)打開一個名為 “example.txt” 的文件。如果文件打開成功,我們向其中寫入 “Hello, World!\n”,然后關閉文件。如果文件打開失敗,我們打印一條錯誤消息并返回 1。

1-2.流的關閉

fclose 是 C 語言中用于關閉一個已打開的文件的標準庫函數。當你使用 fopen 或其他相關函數打開一個文件后,在完成對該文件的讀寫操作后,應該使用 fclose 函數來關閉它。關閉文件是一個重要的步驟,因為它會釋放與文件關聯的所有資源,并確保所有的數據都被正確地寫入到磁盤中。

函數的原型如下:

int fclose(FILE *stream);

參數說明:

  • stream:一個指向 FILE 對象的指針,該對象是由 fopen 或其他相關函數返回的。

返回值:

  • 如果文件成功關閉,fclose 返回零(0)。
  • 如果發生錯誤,fclose 返回非零值(通常是 EOF,它在 <stdio.h> 中定義,通常是一個負數)。

示例:

#include <stdio.h>int main() {FILE *file = fopen("example.txt", "w");if (file == NULL) {printf("Failed to open file\n");return 1;}fprintf(file, "Hello, World!\n");// 關閉文件if (fclose(file) != 0) {printf("Failed to close file\n");return 1;}return 0;
}

在這個示例中,我們在寫入 “Hello, World!\n” 到文件后,使用 fclose 函數來關閉文件。如果關閉文件時發生錯誤,我們打印一條錯誤消息并返回 1。然而,在大多數情況下,關閉文件通常不會失敗,除非發生了磁盤錯誤或其他嚴重的系統問題。

請注意,在嘗試讀取或寫入一個已關閉的文件時,程序的行為是未定義的,并且可能會導致程序崩潰或數據損壞。因此,確保在文件不再需要時關閉它是非常重要的。

1-3.錯誤處理

perror 是 C 語言標準庫中的一個函數,它主要用于處理系統調用或庫函數調用失敗時產生的錯誤。以下是關于 perror 函數的詳細解釋:

函數原型perror
void perror(const char *s);
參數
  • s:這是一個指向字符串的指針,用于在錯誤信息前添加自定義的描述信息。如果 sNULL 或空字符串,則只輸出錯誤描述。
功能
  • perror 函數將最近的系統錯誤代碼(存儲在全局變量 errno 中)轉換為人類可讀的錯誤描述,并將這個描述輸出到標準錯誤流(stderr)。
  • 如果提供了自定義的字符串 s,則這個字符串會被輸出在錯誤信息之前,并后跟一個冒號和空格。
返回值
  • perror 函數沒有返回值(即返回類型為 void)。
使用示例
#include <stdio.h>
#include <stdlib.h>int main() {FILE *fp = fopen("nonexistent_file.txt", "r");if (fp == NULL) {perror("File opening failed"

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

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

相關文章

【國產NI替代】SMU 源測量儀:源測量單元平臺主要用于半導體、傳感器、模組等 IVR 測試測量

? 集 5 臺儀器 (數字萬用表、電壓源、電流源、電子負載和脈沖發生器) 功能于?體 ? 典型輸出源及測量精度 02%&#xff0c;支持直流/脈沖輸出模式 ? 脈沖輸出模式&#xff0c;最?脈沖寬度 100 us &#xff0c;上升時間 10 us ? 具有 pA 級分辨率高精度源&#xff0c;且…

【Python機器學習】PCA——特征提取(1)

PCA的一個重要應用是特征提取。特征提取背后的思想是&#xff0c;可以找到一種數據表示&#xff0c;比給定的原始表示更適合于分析。特征提取很有用&#xff0c;它的一個很好的應用實例就是圖像。圖像由像素組成&#xff0c;通常存儲于紅綠藍強度。圖像中的對象通常由上千個像素…

c++【入門】已知一個圓的半徑,求解該圓的面積和周長?

限制 時間限制 : 1 秒 內存限制 : 128 MB 已知一個圓的半徑&#xff0c;求解該圓的面積和周長 輸入 輸入只有一行&#xff0c;只有1個整數。 輸出 輸出只有兩行&#xff0c;一行面積&#xff0c;一行周長。&#xff08;保留兩位小數&#xff09;。 令pi3.1415926 樣例…

圖論第8天

685.冗余連接II 這題需要考慮兩種情況&#xff1a; 1.兩個輸入 2.沒有兩個輸入就是有成環 class Solution { public:static const int N 1005;int father[N];int n;void init(){for (int i 0; i < n; i){father[i] i;}}int find(int x){return x father[x] ? x : f…

Python——用新字符替換字符串中的舊字符

替換方法&#xff1a; string.replace&#xff08;old&#xff0c;new [&#xff0c;count]&#xff09;參考文章&#xff1a; Python程序用特定字符替換字符串中的空格

變聲器軟件免費版有哪些?國內外12大熱門變聲器大盤點!(新)

變聲軟件是一種人工智能AI音頻處理工具&#xff0c;允許用戶實時修改自己的聲音或改變預先錄制的音頻。這些軟件解決方案可提供不同的效果&#xff0c;如改變聲音的音調或速度&#xff0c;或將我們的聲音轉換成其他人或其他東西的聲音&#xff0c;如名人、卡通人物、機器人或不…

【C/C++】相機標定

參考文章 相機標定&#xff08;Camera calibration&#xff09;原理、步

WinForms 應用(.NET 8.0)使用ReportViewerCore.WinForms顯示打印RDLC報表

在要WinForms 應用&#xff08;.NET 8.0&#xff09;中&#xff0c;顯示RDLC報表&#xff0c;就要使用ReportViewerCore.WinForms。原來的ReportViewer只能在.NET Framework框架下運行。 1.ReportViewerCore.WinForms 程序包說明 SQL Server Reporting Services ReportViewer…

Windows下使用netty的SelfSignedCertificate進行SSL加密通信

在使用netty的時候&#xff0c;經常需要對通信進行SSL加密&#xff0c;這就需要相關的證書和秘鑰&#xff1b; 當我們在自己的開發環境中進行測試的時候&#xff0c;有一個非常簡單的方法來創建證書和私鑰文件&#xff0c;netty提供了SelfSignedCertificate類。 SelfSignedCer…

UG12編程怎么沒有:深度解析與困惑探尋

UG12編程怎么沒有&#xff1a;深度解析與困惑探尋 UG12編程作為現代制造業的重要工具&#xff0c;其應用廣泛且功能強大。然而&#xff0c;對于初學者或某些特定需求的用戶來說&#xff0c;有時可能會遇到“UG12編程怎么沒有”的困惑。這種困惑可能源于軟件功能的不熟悉、操作…

[stm32]——uc/OS-III多任務程序

目錄 一、獲取uC/OS-III源碼 二、移植源代碼 &#xff08;1&#xff09;建立工程文件 &#xff08;2&#xff09;移植uC/OS-III源碼 &#xff08;3&#xff09;添加工程組件和頭文件路徑 &#xff08;4&#xff09;添加頭文件路徑 三、修改代碼 總結 一、獲取uC/OS-III源碼 …

【Vue】聲明式導航-自定義類名(了解)

問題 router-link的兩個高亮類名 太長了&#xff0c;我們希望能定制怎么辦 解決方案 我們可以在創建路由對象時&#xff0c;額外配置兩個配置項即可。 linkActiveClass和linkExactActiveClass const router new VueRouter({routes: [...],linkActiveClass: "類名1&quo…

【中篇】從 YOLOv1 到 YOLOv8 的 YOLO 物體檢測模型歷史

YOLO 型號之所以聞名遐邇,主要有兩個原因:其速度和準確性令人印象深刻,而且能夠快速、可靠地檢測圖像中的物體。上回我解釋了Yolo v1, 今天從Yolov2開始。 YOLOv2:更好、更快、更強 2017 年 7 月一個悶熱的星期二下午,雷德蒙(Joseph Redmon, Yolo創始人)再次走上舞臺。 …

Android gradle kts 8.0以上版本配置簽名和修改APK輸出名字

目錄 概述修改簽名配置新建簽名文件目錄配置簽名信息使用簽名信息打包 修改APK名稱 概述 之前寫過一篇文章是通過Kotlin的Dsl結合gradle編寫的插件來管理項目依賴&#xff0c;我是從一個開源項目叫DanDanPlayAndroid項目上學到的&#xff0c;那時還沒有使用toml文件來管理項目…

【CS.SE】使用 docker pull confluentinc/cp-kafka 的全面指南

文章目錄 1 引言2 準備工作2.1 安裝 Docker2.1.1 在 Linux 上安裝 Docker2.1.2 在 macOS 上安裝 Docker2.1.3 在 Windows 上安裝 Docker 2.2 驗證 Docker 安裝 3 拉取 confluentinc/cp-kafka Docker 鏡像3.1 拉取鏡像3.2 驗證鏡像 4 運行 Kafka 容器4.1 啟動 ZooKeeper4.2 啟動…

【原創】springboot+mysql農業園區管理系統設計與實現

個人主頁&#xff1a;程序猿小小楊 個人簡介&#xff1a;從事開發多年&#xff0c;Java、Php、Python、前端開發均有涉獵 博客內容&#xff1a;Java項目實戰、項目演示、技術分享 文末有作者名片&#xff0c;希望和大家一起共同進步&#xff0c;你只管努力&#xff0c;剩下的交…

公差基礎(互換性和測量基礎)

互換性概念&#xff1a; 圖紙設計是理論的&#xff0c;理性的&#xff0c;沒有誤差的&#xff0c;但是實際上加工上市有誤差的。 所以說&#xff0c;實際加工出來的零件是否符合要求&#xff0c;我們需要對圖紙上的尺寸精度&#xff0c;幾何精度&#xff0c;表面粗糙度進行說明…

STM32關于uc/OS-III的多任務程序

目錄 一、UCOS-III源碼獲取 二、HAL庫工程的建立 1.RCC配置 2.SYS配置 3.USART1配置 4.GPIO配置 5.時鐘配置 6.項目配置 三、KEil文件添加 1.文件復制 2.KEil工程添加 3.添加文件路徑 四、代碼修改 1. 2.修改文件app_cfg.h中代碼 3.修改include.h的代碼 4.修改…

【傳知代碼】DETR[端到端目標檢測](論文復現)

前言&#xff1a;想象一下&#xff0c;當自動駕駛汽車行駛在繁忙的街道上&#xff0c;DETR能夠實時識別出道路上的行人、車輛、交通標志等目標&#xff0c;并準確預測出它們的位置和軌跡。這對于提高自動駕駛的安全性、減少交通事故具有重要意義。同樣&#xff0c;在安防監控、…

【二進制部署k8s-1.29.4】十、coredns的安裝部署

文章目錄 簡介 一.下載并修改coredns配置文件二.安裝coredns三.驗證coredns的安裝 簡介 本章節主要講解安裝coredns-v1.11.1的安裝&#xff0c;并進行驗證。 第一章.安裝前軟件準備及系統初始化階段 第二章.證書及配置文件的準備 一.下載并修改coredns配置文件 下載地址&#x…