linux課程學習二——緩存

一.文件io與標準io的一個區別

遇到死循環可以ctrl c結束進程

使用printf輸出,輸出沒有問題

用wirte輸出,參數1,可以理解為上面介紹的linux標準文件描述符的1(STDOUT)標準輸出,我們加上一個死循環while(1);去執行文件發現是可以執行的(把\n去掉),但是用printf去執行就不可以。對于這個問題就引出了接下來要講的緩存

二.緩存

把用戶緩存內容發到內核緩存中有四種方法

1./n

2.滿緩存時(1024字節)

3.系統調用函數

4.fflush函數

三.行緩存fputs

緩存有如下三類,每一類都有所不同

行緩存的原函數和參數

,使用fclose就可以把緩沖區內最后剩余的數據輸出到磁盤文件中,并釋放文件指針和有關
的緩沖區在fclose之前寫一個死循環,這樣子才可以看出效果,因為 使用fclose就可以把緩沖區內最后剩余的數據輸出到磁盤文件中,并釋放文件指針和有關的緩沖區,這回導致緩存沒有滿就把內容存進去了。之后我們可以看出,a.c里面沒有任何內容。

三.fflush函數

在沒有使用fflush函數之前代碼時不能輸出的,使用之后就可以把hello world輸出

把printf換成fputs(“hello world”,stdout)函數,我們不使用fflush也是無法輸出的,但是把標準輸出atdout改成staerr不使用fflush也可以輸出。因為stderr是三類緩存讀寫函數中的無緩存,直接講內容寫到內核中。

用fget讀數據到數組中然后輸出

注意事項

使用fputs函數寫內容到文件a.c中時光標是會移動的,寫完之后光標是在d之后的,用fgets函數獲取內容時,要用fseek函數移動光標到文件頭,不然光標都在末尾了是讀不出什么數據的,fseek函數也可以用rewind函數代替,效果一樣

ftell函數使用

在代碼寫入和獲取執行之后,我們使用ftell函數來顯示一下當前光標所在的位置是哪里,從結果可以之后fgets獲取內容之前光標被rewind移動到了文件開始,fgets函數使用完之后光標又被移到了離文件開始11的位置,也就是d后面。

四.gets與fget

用gets輸入了七字符它存入的也是七個

將gets換成fgets,可以看到我們輸入了六個,但是len是7,這是因為fgets將新的換行符存入緩存中

五.put與fput

接著上面的代碼修改,執行后可以看到內容有個新的換行符輸出

六.fprintf與sprintf

用fprintf把內容輸出到a.c文件中,fprintf是行緩存的函數,如果在return之前加whilie(1);與

fclose(fp);執行代碼的時候會停留在while哪里,這時打開另一個終端去查看a.c里的內容是空的

sprintf是用于將內容寫入到一個數組之中

七.fgetc與fputc

注意fputs與fputc的? 區別

fputc

下不給寫入“\n”,我們去運行發現a.c中沒有內容,給也沒有,這說明fputc又緩存但是不是行緩存

fgetc

八.cat指令

#include<stdio.h>
int main(int argc,char *argv[])
{FILE fp;int nRet=0;if(argc!=2){printf("fail\n");return -1;}fp=fopen(argv[1],"r");//只讀方式打開    if(fp==NULL){PRINTF("open fail\n");return -2;}while(1){nRet = fgetc(fp);//獲取文件中內容if(feof(fp))  //判斷是否一到文件結束(讀取內容完成){break;//跳出while循環}fputc(nRet,stdout);//內容輸出到屏幕}fclose(fp);return 0;
}

九.標準IO之feof,ferror與flearerr

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

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

相關文章

Kafka中的消息如何分配給不同的消費者?

大家好&#xff0c;我是鋒哥。今天分享關于【Kafka中的消息如何分配給不同的消費者&#xff1f;】面試題。希望對大家有幫助&#xff1b; Kafka中的消息如何分配給不同的消費者&#xff1f; 在 Kafka 中&#xff0c;消息是通過 主題&#xff08;Topic&#xff09; 進行組織的&…

Android的安全問題 - 在 Android 源碼的 system/sepolicy 目錄中,區分 public、private 和 vendor的目的

參考&#xff1a;Google文檔 在 Android 8.0 及更高版本中自定義 SEPolicy 在 Android 源碼的 system/sepolicy 目錄中&#xff0c;區分 public、private 和 vendor 是為了模塊化 SELinux 策略&#xff0c;并明確不同部分的訪問權限和接口邊界。這種設計主要基于以下原因&…

Java NIO之FileChannel 詳解

關鍵點說明 文件打開選項&#xff1a; StandardOpenOption.CREATE - 文件不存在時創建 StandardOpenOption.READ/WRITE - 讀寫權限 StandardOpenOption.APPEND - 追加模式 StandardOpenOption.TRUNCATE_EXISTING - 清空已存在文件 緩沖區操作&#xff1a; ByteBuffer.wrap…

stock-pandas,一個易用的talib的替代開源庫。

原創內容第841篇&#xff0c;專注智能量化投資、個人成長與財富自由。 介紹一個ta-lib的平替——我們來實現一下&#xff0c;最高價突破布林帶上軌&#xff0c;和最低價突破布林帶下軌的可視化效果&#xff1a; cross_up_upper stock[high].copy()# cross_up_upper 最高價突破…

JVM 面經

1、什么是 JVM? JVM 就是 Java 虛擬機&#xff0c;它是 Java 實現跨平臺的基石。程序運行之前&#xff0c;需要先通過編譯器將 Java 源代碼文件編譯成 Java 字節碼文件&#xff1b;程序運行時&#xff0c;JVM 會對字節碼文件進行逐行解釋&#xff0c;翻譯成機器碼指令&#x…

【JavaScript】合體期功法——DOM(一)

目錄 DOMWeb API 基本概念作用和分類 什么是 DOMDOM 樹DOM 對象 獲取 DOM 元素根據 CSS 選擇器來獲取 DOM 元素選擇匹配的第一個元素選擇匹配的多個元素 其他獲取 DOM 元素方法 修改元素的內容對象.innerText 屬性對象.innerHTML 屬性案例&#xff1a;年會抽獎 修改元素屬性修改…

GAMMA數據處理(十)

今天向別人請教了一個問題&#xff0c;剛無意中搜索到了一模一樣的問題 不知道這個怎么解決... ok 解決了 有一個GAMMA的命令可轉換 但是很奇怪 完全對不上 轉換出來的行列號 不知道為啥 再試試 是因為經緯度坐標的小數點位數 de as

Java入門知識總結——章節(二)

ps&#xff1a;本章主要講數組、二維數組、變量 一、數組 數組是一個數據容器&#xff0c;可用來存儲一批同類型的數據 &#x1f511;&#xff1a;注意 類也可以是一個類的數組 public class Main {public static class Student {String name;int age; // 移除 unsignedint…

動態IP:網絡世界的“變色龍”如何改變你的在線體驗?

你知道嗎&#xff1f;有時候我覺得動態IP就像是網絡世界里的“變色龍”。它不像靜態IP那樣一成不變&#xff0c;而是隨時在變化&#xff0c;像是一個永遠在換衣服的演員。你永遠不知道它下一秒會變成什么樣子&#xff0c;但正是這種不確定性&#xff0c;讓它變得特別有趣。想象…

從24GHz到71GHz:Sivers半導體的廣泛頻率范圍5G毫米波產品解析

在5G技術的浪潮中&#xff0c;Sivers半導體推出了創新的毫米波無線產品&#xff0c;為通信行業帶來高效、可靠的解決方案。這些產品支持從24GHz到71GHz的頻率&#xff0c;覆蓋許可與非許可頻段&#xff0c;適應高速、低延遲的通信場景。 5G通信頻段的一點事兒及Sivers毫米波射頻…

aocache:AOCache 新增功能深度解析:從性能監控到靈活配置的全方位升級

最近對aocache 進行了重要升級&#xff0c;最新版本0.6.0增加了幾項新功能&#xff1a;性能分析日志&#xff0c;AOCache性能分析工具&#xff0c;切入點自定義配置&#xff0c;全局配置&#xff0c;本文詳細說明這幾項目新功能的作用和使用方式。 一、性能分析日志 需求背景…

Java EE 進階:MyBatis-plus

MyBatis-plus的介紹 MyBatis-plus是MyBatis的增強工具&#xff0c;在MyBatis的基礎上做出加強&#xff0c;只要MyBatis有的功能MyBatis-plus都有。 MyBatis-plus的上手 添加依賴 在我們創建項目的時候&#xff0c;我們需要添加MyBatis-plus和mysql的依賴 MyBatis-plus的依賴…

GitHub和Gitee上的一些AI項目

以下是GitHub和Gitee上的一些AI項目&#xff1a; GitHub上的AI項目 TensorFlow&#xff1a;一個端到端開源機器學習平臺&#xff0c;包含大量工具和庫&#xff0c;廣泛應用于圖像識別、自然語言處理等領域。PyTorch&#xff1a;由Facebook開發的開源深度學習框架&#xff0c;…

JavaScript網頁設計高級案例:構建交互式圖片畫廊

JavaScript網頁設計高級案例&#xff1a;構建交互式圖片畫廊 在現代Web開發中&#xff0c;交互式元素已成為提升用戶體驗的關鍵因素。本文將通過一個高級案例 - 構建交互式圖片畫廊&#xff0c;展示如何結合HTML和JavaScript創建引人入勝的網頁應用。這個案例不僅涵蓋了基礎的…

Linux命令大全:從入門到高效運維

適合人群&#xff1a;Linux新手 | 運維工程師 | 開發者 目錄 一、Linux常用命令&#xff08;每天必用&#xff09; 1. 文件與目錄操作 2. 文件內容查看與編輯 二、次常用命令&#xff08;按需使用&#xff09; 1. 系統管理與監控 2. 網絡與通信 3. 權限與用戶管理 三、…

Windows 10/11 使用 VSCode + SSH 免密遠程連接 Ubuntu 服務器(指定端口)

摘要&#xff1a; 本文詳細介紹如何在 Windows 系統上通過 VSCode Remote-SSH 免密登錄遠程 Ubuntu 服務器&#xff08;SSH 端口 2202&#xff09;&#xff0c;避免每次輸入密碼的繁瑣操作&#xff0c;提高開發效率。 1. 環境準備 本地系統&#xff1a;Windows 10/11遠程服務…

一些需要學習的C++庫:CGAL和Eysshot

寫在前面&#xff1a; 從開始工作到現在&#xff0c;去過多家公司&#xff0c;多個行業&#xff0c; 雖然大部分時間在通信業&#xff0c;但也有其它的行業的工作沒有做完&#xff0c;但也很感興趣。每次想要研究一下時&#xff0c;總是想不起來。 這里寫一些信息&#xff0c;…

藍橋杯16天刷題計劃一一Day01

藍橋杯16天刷題計劃一一Day01&#xff08;STL練習&#xff09; 作者&#xff1a;blue 時間&#xff1a;2025.3.26 文章目錄 藍橋杯16天刷題計劃一一Day01&#xff08;STL練習&#xff09;[P1540 [NOIP 2010 提高組\] 機器翻譯 - 洛谷 (luogu.com.cn)](https://www.luogu.com.…

相對位置2d矩陣和kron運算的思考

文章目錄 1. 相對位置矩陣2d2. kron運算 1. 相對位置矩陣2d 在swin-transformer中&#xff0c;我們會計算每個patch之間的相對位置&#xff0c;那么我們看到有一連串的拉伸和相減&#xff0c;直接貼代碼&#xff1a; import torch import torch.nn as nntorch.set_printoptio…

Redis 版本演進及主要新特性

Redis 版本發布歷史 穩定版本時間線 Redis 2.6 (2012年)Redis 2.8 (2013年11月)Redis 3.0 (2015年4月) - 首次支持集群Redis 3.2 (2016年5月)Redis 4.0 (2017年7月)Redis 5.0 (2018年10月)Redis 6.0 (2020年4月)Redis 6.2 (2021年2月)Redis 7.0 (2022年4月) - 最新穩定版(截至…