嵌入式學習筆記——day26

  • 文件操作(續)
  • 目錄操作

一、文件操作

1.?lseek

? ? ? ??lseek 是一個用于在文件中移動文件指針的系統調用,通常用于在文件描述符所指向的文件中定位讀取或寫入的位置。它允許程序在文件中隨機訪問數據,而不是只能順序讀取或寫入。

off_t? lseek(int fd, off_t offset, int whence);

參數說明
? ? ? ? fd:文件描述符,表示要操作的文件。
? ? ? ? offset:偏移量,表示要移動的字節數。
? ? ? ? whence:基準位置,決定偏移量的起始點。它可以是以下值之一:
? ? ? ? SEEK_SET:從文件開頭開始計算偏移量。
? ? ? ? SEEK_CUR:從當前文件指針位置開始計算偏移量。
? ? ? ? SEEK_END:從文件末尾開始計算偏移量。

返回值:

成功時,返回新的文件指針位置(從文件開頭計算的字節數)。
失敗時,返回 -1 并設置errno以指示錯誤。

#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>
#include<unistd.h>
#include<string.h>
?
int ? ?main(int argc, char **argv)
{
? ? int fd = open("1.txt", O_WRONLY|O_CREAT|O_TRUNC,0666);
? ? if(-1==fd)
? ? {
? ? ? ? fprintf(stderr, "open error");
? ? ? ? return 1;
? ? }
? ? off_t offset = lseek(fd, 1024, SEEK_SET);
? ? printf("%ld\n",offset);
? ? write(fd, "a", 2);
? ? close(fd);
? ? return 0;
}

?

?2. fileno及其用法

? ? ? ? fileno 是一個用于獲取文件描述符的函數。它通常用于將標準庫中的文件流(FILE*)轉換為底層的文件描述符(int),以便在需要直接使用系統調用時使用。

? ? ? ? fileno 函數在需要將標準庫的文件操作與底層系統調用結合時非常有用。例如,當使用 fopen 打開文件后,可能需要使用 read 或 write 等系統調用進行更底層的操作,這時可以使用 fileno 獲取文件描述符。

?int fileno(FILE *stream);

參數
  • stream:指向?FILE?結構的指針,通常是通過?fopenfclose?等函數打開的文件流。
返回值
  • 成功時返回與?stream?關聯的文件描述符。
  • 如果?stream?無效,返回?-1?并設置?errno

#include<stdio.h>
#include <unistd.h>
?
int ? ?main(int argc, char **argv)
{
? ? FILE*fp = fopen("2.txt", "w");
? ? if(NULL==fp)
? ? {
? ? ? ? return 1;
? ? }
? ? int fd = fileno(fp);
? ? write(fd, "hello", 5);
? ? fclose(fp);
? ? return 0;
}

? 3. fdopen及其用法

? ? ? ? fdopen是一個用于將文件描述符(file descriptor)轉換為文件流(FILE stream)的函數。它通常用于將低級 I/O 操作(如 open、read、write 等)與標準 I/O 庫函數(如 fprintf、fscanf 等)結合使用。

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

參數說明

fd:文件描述符,通常由 open、pipe 等系統調用返回。
mode:指定文件流的打開模式,與 fopen 的模式字符串相同,如 "r"(只讀)、"w"(只寫)、"a"(追加)等。
返回值
? ? ? ? 成功時返回一個指向 FILE 結構的指針,失敗時返回 NULL,并設置 errno 以指示錯誤。

#include<stdio.h>
#include <unistd.h>
#include<fcntl.h>
?
int ? ?main(int argc, char **argv)
{
? ? int fd = open("2.txt", O_RDONLY);
? ? if(-1==fd)
? ? {
? ? ? ? return 1;
? ? }
? ? FILE*fp = fdopen(fd, "r");
? ? if(NULL==fp)
? ? {
? ? ? ? return 1;
? ? }
? ? char buf[512]={0};
? ? fgets(buf,sizeof(buf),fp);
? ? printf("%s",buf);
? ? fclose(fp);
? ? return 0;
}

?

? 4. perror及其用法

???????????perror 是一個用于報告錯誤的標準庫函數。它通常與系統調用(如 open、read、write 等)一起使用,當這些調用失敗時,perror 可以幫助開發者快速定位問題。

?

#include <stdio.h>
#include <errno.h>
?
int ? ?main(int argc, char **argv)
{
? ? FILE*fp = fopen("5.txt", "r");
? ? if(NULL==fp)
? ? {
? ? ? ? printf("error %d\n",errno);
? ? ? ? perror("fopen main.c:10");
? ? }
? ? return 0;
}

二、目錄操作?

?

步驟:

????????打開目標目錄 -->讀取目錄-->關閉目錄?

????????1. opendir:?

????????是一個用于打開目錄的系統調用。它通常用于讀取目錄中的內容。opendir?函數在 POSIX 兼容的系統(如 Linux 和 Unix)中可用。

#include <sys/types.h>
#include <dirent.h>
?
DIR *opendir(const char *name);?

參數
name:要打開的目錄的路徑名。
返回值
成功時,返回一個指向DIR結構的指針,該結構表示打開的目錄。
失敗時,返回NULL,并設置 errno以指示錯誤。
? ? ? ? 2. readir

? ? ? ? 是一個用于讀取目錄內容的系統調用或庫函數,通常在類 Unix 系統中使用。它允許程序遍歷目錄中的文件和子目錄。

? ? ? ? readdir 函數通常與 opendir 和 closedir 一起使用。opendir 用于打開一個目錄,readdir 用于讀取目錄中的條目,closedir 用于關閉目錄。

readdir 的返回值
? ? ? ? readdir 返回一個指向 struct dirent 的指針,該結構體包含目錄項的信息。如果到達目錄末尾或發生錯誤,readdir 返回 NULL。

struct dirent 的常見字段包括:

? ? ? ? d_name:文件名或目錄名。
? ? ? ? d_type:文件類型(如普通文件、目錄等)。

? ? ? ? 3. closedir

? ? ? ? 是一個用于關閉目錄流的系統調用,通常在 Unix 和類 Unix 系統(如 Linux)中使用。它用于釋放與opendir函數打開的目錄流相關的資源。

#include <sys/types.h>
#include <dirent.h>
?
int closedir(DIR *dirp);?

參數
dirp:指向DIR類型的指針,該指針通常由opendir函數返回,表示一個打開的目錄流。
返回值
成功時返回 0。
失敗時返回 -1,并設置errno以指示錯誤類型。
注意事項
在關閉目錄流之前,確保已經完成了對目錄的所有操作,否則可能會導致資源泄漏。
如果closedir調用失敗,程序應適當處理錯誤,以避免后續操作受到影響。

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
?
int ? ?main(int argc, char **argv)
{
? ? DIR*dir=opendir("../");
? ? if(NULL==dir)
? ? {
? ? ? ? perror("opendir");
? ? ? ? return 1;
? ? }
?
? ? while (1)
? ? {
? ? ? ?struct dirent*info= readdir(dir);
? ? ? ?if(NULL==info)
? ? ? ?{
? ? ? ? ?break;
? ? ? ?}
? ? ? ?printf("%s\n",info->d_name);
? ? }
? ? closedir(dir); ? ?
? ? return 0;
}

?

??4. time

????????是一個用于獲取當前時間的函數。它通常返回自 Unix 紀元(1970 年 1 月 1 日 00:00:00 UTC)以來的秒數。

??time函數定義在<time.h>?頭文件中。它的原型如下:

#include <time.h>
?
time_t time(time_t *tloc);?

time函數返回當前時間,并將其存儲在tloc指向的內存位置(如果tloc不是NULL)。time_t?是一個數據類型,通常是一個長整型,表示自 Unix 紀元以來的秒數。

????????可用local time函數 轉化為具體的日期和時間。

#include <stdio.h>
#include <time.h>
?
int ? ?main(int argc, char **argv)
{
? ? time_t tm;
? ? tm =time(NULL);
?
? ? printf("%ld\n",tm);
? ? struct tm*tminfo = localtime(&tm);
? ? printf("%d-%d-%d %d:%d:%d\n",tminfo->tm_year+1900,tminfo->tm_mon+1,tminfo->tm_mday
? ? ,tminfo->tm_hour,tminfo->tm_min,tminfo->tm_sec);
? ? return 0;
}

?

?

?

?

?

?

?

?

?

?

?

?

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

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

相關文章

LINUX安裝運行jeelowcode前端項目

參考 JeeLowCode低代碼社區,JeeLowCode低代碼開發平臺,JeeLowCode低代碼開發框架,快速啟動&#xff08;VUE&#xff09; 安裝node 18 LINUX安裝node/nodejs_linux安裝node 安裝到哪-CSDN博客 安裝PNPM LINUX安裝PNPM-CSDN博客 下載 git clone https://gitcode.com/jeelo…

【Redis】基本架構

1. 單線程模型 現在開啟了三個redis-cli客戶端同時執行命令。 客戶端1設置一個字符串鍵值對&#xff1a; 127.0.0.1:6379> set hello world客戶端2對counter做自增操作&#xff1a; 127.0.0.1:6379> incr counter客戶端3對counter做自增操作&#xff1a; 127.0.0.1:…

[yolov11改進系列]基于yolov11的修改檢測頭為自適應特征融合模塊為ASFFHead檢測頭的python源碼+訓練源碼

【自適應空間特征融合模塊ASFF介紹】 ASFF&#xff08;Adaptive Spatial Feature Fusion&#xff09;是一種自適應特征融合策略&#xff0c;旨在解決目標檢測中不同尺度特征之間的沖突和不一致性。 ? 基本概念和原理 ASFF通過學習每個尺度特征的自適應融合權重&#xff0c…

機器學習——支持向量機SVM

機器學習——支持向量機 一、介紹1.概述1.1 概念1.2 SVM的優缺點 2.硬間隔2.1 求解間隔2.2 對偶問題 3.軟間隔3.1 松馳變量3.2 對偶問題 4.核函數4.1 概念4.2 常見的核函數 二、代碼實戰1.實驗要求2.具體實現2.1 詞匯表加載2.2 郵件預處理函數2.3詞索引轉換為特征向量2.4 SVM 模…

Python 科學計算有哪些提高運算速度的技巧

在科學計算中提高 Python 運算速度的核心技巧包括&#xff1a;使用 NumPy 向量化操作、利用 Numba 加速函數、調用 C/C 擴展模塊、應用多線程/多進程并行計算、使用 GPU 加速計算。其中&#xff0c;使用 NumPy 向量化是最基礎且見效最快的優化方式。NumPy 利用底層 C 實現高效的…

React+Antd全局加載遮罩工具

下面是全局加載遮罩工具&#xff0c;功能&#xff1a;提供show和showWithDelay/hide方法用于顯示/延時顯示/隱藏遮罩&#xff0c;它還提供loading屬性返回是否正在loading。通常用于耗時較長的操作&#xff0c;比如遠端api調用。 如何用它&#xff0c;下面是個例子&#xff0c…

【機器學習基礎】機器學習入門核心算法:GBDT(Gradient Boosting Decision Tree)

機器學習入門核心算法&#xff1a;GBDT&#xff08;Gradient Boosting Decision Tree&#xff09; 1. 算法邏輯2. 算法原理與數學推導2.1 目標函數2.2 負梯度計算2.3 決策樹擬合2.4 葉子權重計算2.5 模型更新 3. 模型評估評估指標防止過擬合 4. 應用案例4.1 金融風控4.2 推薦系…

水墨色調中國風PPT模版分享

水墨色調中國風PPT模版分享&#xff1a;水墨中國風PPT模版https://pan.quark.cn/s/4368c537b1d2 第一套PPT模版?&#xff1a;主題是“愛蓮說”&#xff0c;水墨風格封面。核心視覺是綠色蓮蓬、白鶴、紅色印章&#xff0c;文字有“愛蓮說”等。適用文學或傳統文化類演示。 ?第…

PBX、IP PBX、FXO 、FXS 、VOIP、SIP 的概念解析以及關系

PBX&#xff08;Private Branch Exchange&#xff09; 概念 &#xff1a;PBX 是專用交換機&#xff0c;是一種在企業或組織內部使用的電話交換系統。它允許內部用戶之間以及內部用戶與外部公共電話網絡&#xff08;PSTN&#xff09;之間進行通信。例如&#xff0c;在一個大型企…

LabVIEW雙光子熒光成像軟件開發

雙光子熒光成像技術在抑郁小鼠腦內丙二醛&#xff08;MDA&#xff09;和甲醛&#xff08;FA&#xff09;檢測中的軟件開發&#xff0c;基于 LabVIEW 平臺構建從硬件控制、數據采集到圖像處理的全流程系統。結合 5734 FPGA 實現實時圖像處理&#xff0c;突出雙光子成像的深度開發…

OSI模型中的網絡協議

一、電子郵件協議&#xff1a;從SMTP到MIME的擴展 電子郵件系統的核心協議包括SMTP&#xff08;Simple Mail Transfer Protocol&#xff09;、POP3&#xff08;Post Office Protocol&#xff09;和IMAP&#xff08;Internet Message Access Protocol&#xff09;&#xff0c;但…

流程自動化引擎:讓業務自己奔跑

在當今競爭激烈的商業環境中&#xff0c;企業面臨著快速變化的市場需求、日益復雜的業務流程以及不斷增長的運營成本。如何優化業務流程、提升效率并降低成本&#xff0c;成為企業持續發展的關鍵問題。 流程自動化引擎&#xff08;Process Automation Engine&#xff09;作為一…

DNS解析過程以及使用的協議名稱

DNS&#xff08;Domain Name System 域名系統&#xff09;解析是一個分層查詢的過程 1.本地緩存查詢階段 先檢查瀏覽器自身的DNS緩存 接著檢查操作系統的DNS緩存 最后檢查本地 hosts 文件 2.本地DNS服務器查詢階段 先向本地DNS服務器查詢&#xff0c;協議是 DNS over UDP&a…

思澈科技助力Keep Watch Pilot 1:重新定義智能運動手表體驗

——以創新芯片技術&#xff0c;打造長續航、高性能的隨身運動教練 作為智能穿戴領域的核心技術支持者&#xff0c;思澈科技攜手Keep共同推出全新智能運動手表Keep Watch Pilot 1。該產品搭載思澈科技自主研發的SF32LB557芯片&#xff0c;在高性能顯示、超長續航與精準運動監測…

github actions入門指南

GitHub Actions 是 GitHub 提供的持續集成和持續交付&#xff08;CI/CD&#xff09;平臺&#xff0c;允許開發者自動化軟件工作流程&#xff08;如構建、測試、部署&#xff09;。以下是詳細介紹&#xff1a; 一、核心概念 Workflow&#xff08;工作流程&#xff09; 持續集成的…

Pytorch中一些重要的經典操作和簡單講解

Pytorch中一些重要的經典操作和簡單講解&#xff1a; 形狀變換操作 reshape() / view() import torchx torch.randn(2, 3, 4) print(f"原始形狀: {x.shape}")# reshape可以處理非連續張量 y x.reshape(6, 4) print(f"reshape后: {y.shape}")# view要求…

ubuntu下nginx

我用的是ubuntu22 配置文件的準確位置 靜態網頁的存放位置 放大看到在靜態文件部署的配置路徑 該路徑下面有一個default文件查看 針對上圖的解析如下&#xff1a; 找到root /var/www/html 我嘗試把自己的一個index文件設置為默認&#xff0c;復制到/var/www/html下 ctrl加…

Git使用手冊保姆級教程

Git 使用手冊 一、Git 簡介與安裝 什么是Git&#xff1f; ? Git 是一個分布式版本控制系統&#xff0c;用于跟蹤文件變化&#xff0c;支持多人協作開發。 安裝步驟 ? Windows&#xff1a;通過 Git官網 下載安裝包&#xff0c;按默認配置安裝即可。 ? macOS&#xff1a…

k8s Headless Service

Kubernetes 無頭服務&#xff08;Headless Service&#xff09;配置與使用場景 1.無頭服務概述 無頭服務&#xff08;Headless Service&#xff09;是 Kubernetes 中的一種特殊服務類型&#xff0c;它**不分配集群 IP&#xff08;ClusterIP&#xff09;&#xff0c;而是直接暴露…

基本面高股息策略

策略概述 一種基于基本面高股息策略的投資策略,主要通過Python在聚寬平臺上實現。該策略的核心思想是通過篩選出具有優質基本面和高股息率的股票進行投資,以期獲得穩定的長期回報。策略包括以下幾個主要步驟: 1. 初始化與參數設置:定義策略的基本參數和回測設置。 2. 每日…