嵌入式linux_C应用学习之API函数

news/2024/7/7 20:26:23

1.文件IO

1.1 open打开文件

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
  • pathname:字符串类型,用于标识需要打开或创建的文件,可以包含路径信息,如:“./src_file”、"/home/dengtao/hello.c"等;如果 pathname 是一个符号链接,会对其进行解引用。
  • flags:调用 open 函数时需要提供的标志,包括文件访问模式标志以及其它文件相关标志,如O_RDONLY,O_CREAT,O_RDWR,O_RDWR,O_EXCL,O_NOFOLLOW
  • mode:此参数用于指定新建文件的访问权限,只有当 flags 参数中包含 O_CREAT 或 O_TMPFILE 标志时才有效(O_TMPFILE 标志用于创建一个临时文件)如:S_IRUSR 允许文件所属者读文件,S_IWUSR 允许文件所属者写文件,S_IXUSR 允许文件所属者执行文件
  • 使用:
int fd = open("/home/dengtao/hello", O_RDWR | O_CREAT, S_IRWXU | S_IRGRP | S_IROTH);
if (-1 == fd)//使用 open 函数打开一个指定的文件,如果该文件不存在则创建该文件,
return fd;

int fd = open("./app.c", O_RDWR)//使用 open 函数打开一个已经存在的文件(例如当前目录下的 app.c 文件),使用可读可写方式打开
if (-1 == fd)
return fd;

1.2 write写文件

#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);

调用 write 函数可向打开的文件写入数据

  • fd:文件描述符。关于文件描述符,前面已经给大家进行了简单地讲解,这里不再重述!我们需要将进行写操作的文件所对应的文件描述符传递给 write 函数。
  • buf:指定写入数据对应的缓冲区。
  • count:指定写入的字节数。
  • 返回值:如果成功将返回写入的字节数(0 表示未写入任何字节),如果此数字小于 count 参数,这不是错误,譬如磁盘空间已满,可能会发生这种情况;如果写入出错,则返回-1。

1.3 read 读文件

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
  • 返回值:如果读取成功将返回读取到的字节数,实际读取到的字节数可能会小于 count 参数指定的字节数,也有可能会为 0

1.4 close 关闭文件

#include <unistd.h>
int close(int fd);

1.5 lseek

#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
  • whence:用于定义参数 offset 偏移量对应的参考值,该参数为下列其中一种(宏定义):
    ⚫ SEEK_SET:读写偏移量将指向 offset 字节位置处(从文件头部开始算);

⚫ SEEK_CUR:读写偏移量将指向当前位置偏移量 + offset 字节位置处,offset 可以为正、也可以为负,如果是正数表示往后偏移,如果是负数则表示往前偏移;
⚫ SEEK_END:读写偏移量将指向文件末尾 + offset 字节位置处,同样 offset 可以为正、也可以为负,如果是正数表示往后偏移、如果是负数则表示往前偏移。

  • 返回值:成功将返回从文件头部开始算起的位置偏移量(字节为单位),也就是当前的读写位置;发生错误将返回-1。

使用示例

off_t off = lseek(fd, 0, SEEK_SET);//将读写位置移动到文件开头处:
off_t off = lseek(fd, 0, SEEK_END);//将读写位置移动到文件末尾:
off_t off = lseek(fd, 100, SEEK_SET);//将读写位置移动到偏移文件开头 100 个字节处:
off_t off = lseek(fd, 0, SEEK_CUR);//获取当前读写位置偏移量:

Tips

man 2 open查看命令介绍

man 命令后面跟着两个参数,数字 2 表示系统调用,man 命令除了可以查看系统调用的帮助信息
外,还可以查看 Linux 命令(对应数字 1)以及标准 C 库函数(对应数字 3)所对应的帮助信息;最后一个
参数 open 表示需要查看的系统调用函数名。


http://lihuaxi.xjx100.cn/news/1966432.html

相关文章

1.1 面试经典 150 题-合并两个有序数组

合并两个有序数组 方法一&#xff1a;先合并再排序 class Solution:def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:"""Do not return anything, modify nums1 in-place instead."""# 先合并for i in range…

原先有一个图,dfs序是1,2,...,n, 但是其中一些边被破坏,给定被破坏边后的图,求最少要加几条边,可以使图的dfs序为1,2,...,n

题目 #include<bits/stdc.h> using namespace std; #define int long long #define pb push_back const int maxn 2e5 5, maxm 2e3 5; int a[maxn]; int nxt;//下一个应该遍历的结点 int res 0; int n, m; vector<int> G[maxn]; void dfs(int u){if(u nxt) …

深入浅出Pytorch宝典1.0

文章目录 前言1. 张量操作2. 自动微分3. 数据加载和处理4. 模型构建和训练5. 预训练模型和迁移学习6. 调试和性能7. 高级特性总结 torch中主要的数据对象主要特点和功能张量的创建 数据处理和转换1.torch.tensor() 创建一个新的张量&#xff08;Tensor&#xff09;2.torch.zero…

Visual Studio常用快捷键及调试操作

CtrlF10 运行到光标处 调试时候不用一行行按F10了CtrlMM 折叠或展开当前方法CtrlMO 折叠所有方法CtrlML 展开所有方法CtrlEW 自动换行/取消自动换行CtrlU 选中文本转小写CtrlShiftU 选中文本转大写CtrlWinO 启动软键盘F9 光标行加断点CtrlAltB 打开断点窗口 或通过Debug -> …

微服务自动化docker-compose

一、docker-compose介绍 Docker Compose是一个用来定义和运行多个复杂应用的Docker编排工具。例如&#xff0c;一个使用Docker容器的微服务项目&#xff0c;通常由多个容器应用组成。那么部署时如何快速启动各个微服务呢&#xff0c;一个个手动启动&#xff1f;假如有上百个微服…

DA14531-外设驱动篇-UART收发通信应用

目录 1.I2C通信相关文件2.宏定义列表3.主要函数接口4.串口发送数据5.串口接收数据1.I2C通信相关文件 1)uart.c和uart.h(SDK文件) 2)app_uartProtocol.c和app_uartProtocol.h(用户应用文件) 2.宏定义列表 宏定义注解CFG_PRINTF用户开启串口CFG_PRINTF_UART2串口打印宏UA…

【UnityShader入门精要学习笔记】第四章(4)矩阵的几何意义

本系列为作者学习UnityShader入门精要而作的笔记&#xff0c;内容将包括&#xff1a; 书本中句子照抄 个人批注项目源码一堆新手会犯的错误潜在的太监断更&#xff0c;有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 复习知识点复习矩阵加减矩阵…

服务接口调用 OpenFeign

服务接口调用 OpenFeign Spring Cloud OpenFeign 是一个基于Java的声明式HTTP客户端框架&#xff0c;用于简化编写HTTP请求和处理HTTP响应的过程。它是Spring Cloud生态系统中的一部分&#xff0c;旨在简化微服务架构中的服务间通信。 1. 介绍 Feign 是 NetFlix 开发的一个轻…