Linux FILE文件操作2- fopen、fclose、fgetc、fputc、fgets、fputs驗證

目錄

?1.fopen?打開文件

1.1 只讀打開文件,并且文件不存在

1.2 只寫打開文件,并且文件不存在

1.3?只寫打開文件,并且文件存在,且有內容

1.4 追加只寫打開文件,并且文件不存在

2.?fclose 關閉文件

3. fgetc?讀取一個字符

4.fputc?寫入一個字符

5.fgets?從文件中讀取一行字符串

(1)讀取的字節數小于文件一行內容,提前結束讀取

(2)讀取的字節數小于文件一行內容,提前結束讀取

6.fputs 向文件寫入一個字符串


?1.fopen?打開文件

函數原型:

/* 功能:創建或者打開一個文件
參數:
path:文件名,如果只寫文件名,默認就是當前路徑,也可以添加路徑
mode:文件權限
r 只讀打開:如果文件不存在則報錯,文件存在只讀打開
r+ 讀寫打開,如果文件不存在則報錯,文件存在讀寫打開
w 只寫打開,如果文件不存在則創建;如果文件存在則清空,只寫打開;
w+ 讀寫打開,如果文件不存在則創建;如果文件存在則清空,讀寫打開
a 追加只寫打開,如果文件不存在則創建;如果文件存在直接追加,只寫打開
a+ 追加讀寫打開,如果文件不存在則創建;如果文件存在則追加讀寫打開返回值:成功:文件指針失敗:NULL */
FILE *fopen(const char *path, const char *mode);

1.1 只讀打開文件,并且文件不存在

程序:

#include <stdio.h>int test1()
{//使用fopen函數打開或者創建文件,返回文件指針FILE *fp = NULL;//以只讀的方式打開文件,如果文件不存在則報錯fp = fopen("./file.txt", "r");if(fp == NULL){printf("fail to fopen\n");return -1;}//使用fclose關閉文件fclose(fp);
}int main(int argc, char *argv[])
{test1(fp);return 0;
}

運行結果:

1.2 只寫打開文件,并且文件不存在

程序:

#include <stdio.h>int test2()
{//使用fopen函數打開或者創建文件,返回文件指針FILE *fp = NULL;//以只寫的方式打開文件,如果文件不存在則創建,如果文件存在清空fp = fopen("./file.txt", "w");if(fp == NULL){printf("fail to fopen\n");return -1;}//使用fclose關閉文件fclose(fp);
}int main(int argc, char *argv[])
{    test2();return 0;
}

運行結果:

1.3?只寫打開文件,并且文件存在,且有內容

程序:與3.2只寫打開文件,并且文件不存在,程序相同

運行結果:

1.4 追加只寫打開文件,并且文件不存在

程序:

#include <stdio.h>int test3()
{//使用fopen函數打開或者創建文件,返回文件指針FILE *fp = NULL;//以只寫的方式打開文件,如果文件不存在則創建,文件存在則追加fp = fopen("./file.txt", "a");if(fp == NULL){printf("fail to fopen\n");return -1;}//使用fclose關閉文件fclose(fp);
}int main(int argc, char *argv[])
{test3();return 0;
}

運行結果:

2.?fclose 關閉文件

/*
功能:關閉一個文件指針,無法在對當前文件進行操作
參數:
stream:指定的文件指針,fopen函數的返回值返回值:
成功:0
失敗:EOF注意:注意一個文件只能關閉一次,不能多次關閉。
關閉文件之后就不能再文件指針對文件進行讀寫等操作了。
*/
int fclose(FILE *stream);

程序:見fopen?打開文件,程序最后。

3. fgetc?讀取一個字符

函數原型:

 /* 功能:從文件指針標識的文件中讀取一個字符參數:stream:指定的文件指針返回值:成功:讀取的字符失敗:EOF如果文件讀取完畢,也會返回EOF */int fgetc(FILE *stream);

程序:

#include <stdio.h>int test1()
{FILE *fp = NULL;fp = fopen("./file.txt", "r");if(fp == NULL){printf("fail to fopen\n");return -1;}//使用fgetc從文件中讀取一個字符int c = fgetc(fp);printf("c = [%c] - %d\n", c, c);printf("test1 end \n");
}int main(int argc, char *argv[])
{FILE *fp = NULL;fp = fopen("./file.txt", "r");if(fp == NULL){printf("fail to fopen\n");return -1;}//文件的每一行結束的位置都有一個標識,是一個換行符,稱之為行結束符//fgetc可以讀取到行結束符int c;while((c = fgetc(fp)) != EOF){printf("c = [%c] - %d  ", c, c);}printf(" \ntest1 start \n");test1();return 0;
}

運行結果:

4.fputc?寫入一個字符

函數原型:

 /* 功能:向文件指針標識的文件中寫入一個字符參數:c:要寫入的字符stream:指定的文件指針返回值:成功:要寫入的字符失敗:EOF */
int fputc(int c, FILE *stream);

程序:

#include <stdio.h>int test1()
{FILE *fp = NULL;//只寫打開./file.txt,不存在則創建文件,文件存在則清空fp = fopen("./file.txt", "w");if(fp == NULL){printf("fail to fopen\n");return -1;}int i;//通過fputc函數向文件寫入一個字符i = fputc('h', fp);i = fputc('e', fp);i = fputc('l', fp);i = fputc('\n', fp);i = fputc('l', fp);i = fputc('o', fp);if(i ==  EOF){printf("fail to fputc\n");return -1;}return 0;
}int main(int argc, char *argv[])
{test1();return 0;
}

運行結果:

5.fgets?從文件中讀取一行字符串

函數原型:

 /* 功能:從文件中讀取內容
參數:
s:保存讀取到的內容
size:每次讀取的最大個數
stream:文件指針返回值:
成功:讀取的數據的首地址
失敗:NULL如果文件內容讀取完畢,也返回NULL注意:從stream所指的文件中讀取字符,在讀取的時候碰到換行符或者是碰到文件的末尾停止讀取,或者是讀取了size‐1個字節停止讀取,在讀取的內容后面會加一個\0,作為字符串的結尾 */
char *fgets(char *s, int size, FILE *stream);

(1)讀取的字節數小于文件一行內容,提前結束讀取

程序:

#include <stdio.h>//fgets讀取的字節數大于文件一行內容,碰到 換行符 \n 提前結束讀取
int test1() 
{FILE *fp = NULL;fp = fopen("./file.txt", "r");if(fp == NULL){printf("fail to fopen\n");return -1;}//使用fgets讀取文件內容//fgets每次讀取時最多讀取文件一行內容,只要遇到行結束符就立即返回char buf[32] = {0};//從fp里讀取32個字節到buffgets(buf, 32, fp);printf("buf = %s\n", buf);printf("test1 end \n");
}int main(int argc, char *argv[])
{printf("test1 start \n");test1();return 0;
}

運行結果:

(2)讀取的字節數小于文件一行內容,提前結束讀取

程序:

#include <stdio.h>//fgets讀取的字節數小于文件一行內容,提前結束讀取 
int test2() 
{FILE *fp = NULL;//file.txt內容 0123459789abcdefghijABCDEFGHIJfp = fopen("./file.txt", "r");if(fp == NULL){printf("fail to fopen\n");return -1;}//使用fgets讀取文件內容//fgets每次讀取時最多讀取文件一行內容,只要遇到行結束符就立即返回char buf[32] = {0};//從fp里讀取15個字節到buffgets(buf, 15, fp);printf("buf = %s\n", buf);printf("test2 end \n");
}int main(int argc, char *argv[])
{printf("test2 start \n");test2();return 0;
}

運行結果:

6.fputs 向文件寫入一個字符串

函數原型:

?/* 功能:向文件寫入數據參數:s:要寫入的內容stream:文件指針返回值:成功:寫入文件內容的字節數失敗:EOF */
int fputs(const char *s, FILE *stream);

程序:

#include <stdio.h>int main(int argc, char *argv[])
{FILE *fp = NULL;fp = fopen("./file.txt", "w");if(fp == NULL){printf("fail to fopen\n");return -1;}//通過fputs函數向文件寫入數據fputs("0123459789\n", fp);fputs("ABCDEFGHIJ", fp);fputs("9876543210", fp);return 0;
}

運行結果:

file.txt內容:

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

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

相關文章

如何檢查CMS建站系統的插件是否安全?

檢查好CMS建站系統的插件安全是確保網站安全的重要環節&#xff0c;對于常見的安全檢查&#xff0c;大家可以利用以下幾種有效的方法和工具&#xff0c;來幫你評估插件的安全性。 1. 檢查插件來源和開發者信譽 選擇可信來源&#xff1a;僅從官方插件庫或可信的第三方開發者處…

使用Dependency Walker和Beyond Compare快速排查dll動態庫損壞或被篡改的問題

目錄 1、問題描述 2、用Dependency Walker工具打開qr.dll庫&#xff0c;查看庫與庫的依賴關系以及接口調用情況&#xff0c;定位問題 3、使用Beyond Compare工具比較一下正常的msvcr100d.dll和問題msvcr100d.dll的差異 4、最后 C軟件異常排查從入門到精通系列教程&#xff…

2025.3.17總結

今天又是不開心得一天&#xff0c;回歸一個問題單&#xff0c;晚上看了下科目四&#xff0c;不到九點就領夜宵回去了。 每次干得不開心&#xff0c;總會有跑路得念頭&#xff0c;真的卷不動了&#xff0c;考個試考到抑郁&#xff0c;考到懷疑人生。還沒等他人辭退&#xff0c;…

【CF】Day9——Codeforces Round 953 (Div. 2) BCD

B. New Bakery 題目&#xff1a; 思路&#xff1a; 被標簽害了&#xff0c;用什么二分&#xff08; 很簡單的思維題&#xff0c;首先如果a > b&#xff0c;那么全選a就行了&#xff0c;還搞啥活動 否則就選 b - a 天來搞活動&#xff0c;為什么&#xff1f; 首先如果我…

【大模型】Transformer、GPT1、GPT2、GPT3、BERT 的論文解析

前言 在自然語言處理&#xff08;NLP&#xff09;和深度學習的快速發展中&#xff0c;Transformer模型和 GPT系列模型扮演了至關重要的角色。本篇博客旨在對這些開創性的論文進行介紹&#xff0c;涵蓋它們的提出時間、網絡結構等關鍵信息&#xff0c;能夠快速的理解這些模型的設…

Spring Security 教程:從入門到精通(含 OAuth2 接入)

Spring Security 教程&#xff1a;從入門到精通&#xff08;含 OAuth2 接入&#xff09; Spring Security 是 Spring 框架中備受推崇的安全模塊&#xff0c;廣泛應用于構建安全可靠的企業級應用程序。它提供了一套全面的解決方案&#xff0c;涵蓋身份認證&#xff08;Authenti…

OpenGL ES 入門指南:從基礎到實戰

引言&#xff1a;為什么需要 OpenGL ES&#xff1f; 在當今的嵌入式設備&#xff08;如智能手機、汽車儀表盤、智能家居中控屏&#xff09;中&#xff0c;流暢的圖形渲染能力是用戶體驗的核心。OpenGL ES&#xff08;OpenGL for Embedded Systems&#xff09; 作為行業標準&am…

java的WeakHashMap可以用來做緩存使用?強軟弱虛四種引用對比

在 Java 中&#xff0c;引用&#xff08;Reference&#xff09;機制用于管理對象的生命周期和垃圾回收。Java 提供了四種類型的引用&#xff1a;強引用&#xff08;Strong Reference&#xff09;、軟引用&#xff08;Soft Reference&#xff09;、弱引用&#xff08;Weak Refer…

51單片機指令系統入門

目錄 基本概念講解 一、機器指令? 二、匯編指令? &#xff08;一&#xff09;匯編指令的一般格式 &#xff08;二&#xff09;按字節數分類的指令 三、高級指令 總結? 基本概念講解 指令是計算機&#xff08;或單片機&#xff09;中 CPU 能夠識別并執行的基本操作命令…

使用 Docker 部署 MySQL 8

使用 Docker 部署 MySQL 8 詳細指南 MySQL 是一個廣泛使用的開源關系型數據庫管理系統。通過 Docker 部署 MySQL 8 可以快速搭建一個可移植、可擴展的數據庫環境。本文將詳細介紹如何使用 Docker 部署 MySQL 8&#xff0c;并講解如何根據需求配置 MySQL。 從拉取鏡像開始的詳細…

AtCoder Beginner Contest 397(ABCDE)

目錄 A - Thermometer 翻譯&#xff1a; 思路&#xff1a; 實現&#xff1a; B - Ticket Gate Log 翻譯&#xff1a; 思路&#xff1a; 實現&#xff1a; C - Variety Split Easy 翻譯&#xff1a; 思路&#xff1a; 實現&#xff1a; D - Cubes 翻譯&#xff1a…

數模AI使用教程(新) 2025.3.17

DeepseekR1doubao1.5大模型組合&#xff0c;數模智能體題目解答一等水平&#xff0c;另外也有統計建模、期刊復現智能體。 功能&#xff1a;問題重述、解釋數據文件、深度思考與邏輯梳理、問題關鍵點分析、知識整理、查找數據源、問題分析、使用方法推薦[會詢問要求]、模型建立…

Spring Cloud Gateway 生產級實踐:高可用 API 網關架構與流量治理解析

API 網關的核心價值 在分布式微服務架構中&#xff0c;API 網關作為系統流量的唯一入口&#xff0c;承擔著路由分發、安全防護、流量治理三大核心職責。Spring Cloud Gateway 基于響應式編程模型與 Netty 高性能網絡框架&#xff0c;提供靈活的路由規則、動態過濾器鏈和深度集…

在Pycharm配置conda虛擬環境的Python解釋器

〇、前言 今天在配置python解釋器時遇到了這樣的問題 經過一下午自行摸索、上網搜尋后&#xff0c;終于找到的解決的方案&#xff0c;遂將該方法簡要的記錄下來&#xff0c;以備后用&#xff0c;并希望能幫助到有同樣問題或需求的朋友:) 我所使用的軟件的版本如下&#xff0c;假…

寬帶(Broadband)

寬帶&#xff08;Broadband&#xff09; 是一種高速互聯網接入技術&#xff0c;能夠同時傳輸多種類型的數據&#xff08;如語音、視頻、文本等&#xff09;。與傳統的窄帶&#xff08;如撥號上網&#xff09;相比&#xff0c;寬帶提供了更高的數據傳輸速率和更穩定的連接&#…

集成學習(上):Bagging集成方法

一、什么是集成學習&#xff1f; 在機器學習的世界里&#xff0c;沒有哪個模型是完美無缺的。就像古希臘神話中的"盲人摸象"&#xff0c;單個模型往往只能捕捉到數據特征的某個側面。但當我們把多個模型的智慧集合起來&#xff0c;就能像拼圖一樣還原出完整的真相&a…

VLLM:虛擬大型語言模型(Virtual Large Language Model)

VLLM&#xff1a;虛擬大型語言模型&#xff08;Virtual Large Language Model&#xff09; VLLM指的是一種基于云計算的大型語言模型的虛擬實現。它通常是指那些由多個服務器組成的分布式計算環境中的復雜機器學習模型&#xff0c;這些模型能夠處理和理解大量的文本數據。VLLM的…

Springboot+Vue登錄、注冊功能(含驗證碼)(后端!)

我們首先寫一個接口&#xff0c;叫login&#xff01;然后對傳入一個user&#xff0c;因為我們前端肯定是要傳過來一個user&#xff0c;然后我們后端返回一個user&#xff0c;因為我們要根據這個去校驗&#xff01;我們還引入了一個hutool的一個東西&#xff0c;在pom文件里面引…

馮 ? 諾依曼體系結構

馮 ? 諾依曼體系結構 一、馮 ? 諾依曼體系結構推導階段 1&#xff1a;初始計算機體系結構&#xff08;僅輸入、運算、輸出&#xff09;階段 2&#xff1a;加入控制功能&#xff0c;初步形成 CPU 概念階段 3&#xff1a;性能瓶頸與引入內存階段 4&#xff1a;最終馮諾依曼體系…

Python print() 打印多個變量時,可變對象和不可變對象的區別

先來看這段代碼&#xff1a; tmp [] print(tmp, tmp.append(1), tmp)輸出&#xff1a; [1] None [1]并不是一些人認為的 [] None [1] 這是因為列表是可變對象&#xff0c;print()打印前會先計算出所有結果&#xff0c;最后再打印出來&#xff0c;中間在列表中添加了1&#…