嵌入式学习笔记——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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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. 每日…