千锋教育嵌入式物联网教程之系统编程篇学习-01

news2024/11/30 2:49:38

目录

 课程视频链接

 笔记目的

什么是系统编程

 如何操作内核的系统调用

 系统调用的分类​编辑

 系统调用的返回值

 系统调用IO函数

 文件描述符

 文件IO文件描述符与标准IO的文件指针对应关系

Man手册使用

open函数

函数调用失败打印错误

close函数

 测试一个进程最多能产生多少个文件描述符

 文件描述符值的规律​

 write函数

 read函数

 读数据需要注意的问题

 lseek函数

 remove函数 ​

 课程视频链接

3-2.01 系统编程概述_哔哩哔哩_bilibili

 笔记目的

复习一遍学习过的知识,该视频的知识较于基础,涉及到的深层知识并不多,适合入门推荐

开发的时候直接对着一本书即可,查书即可

什么是系统编程

 如何操作内核的系统调用

操作内核的系统调用是因为为了操作硬件,而只有内核才能直接操作硬件设备

 系统调用本质上就是操作系统提供给用户程序的一组特殊的函数接口,我们使用这些函数,对内核进行操作,从而对硬件进行操作------系统调用的学习就是学会灵活使用库函数(基础知识+编程能力)所以说系统调用:就是利用别人已经给好的函数进行编程处理

 系统调用的分类

 系统调用的返回值

可以理解为系统调用函数的返回值,一般我们使用函数的时候,都是需要判断函数是否成功使用,就跟FreeRTOS判断任务是否成功创建一样的,但是FreeRTOS的函数不会返回错误的原因,虽然一般任务创建失败的原因是空间不足。但是系统调用函数却可以返回函数错误信息,并且打印出来---------关键字(error、perror) 

 系统调用IO函数

 文件描述符

文件描述符类似于C语言中的文件指针

 文件IO文件描述符与标准IO的文件指针对应关系

 

Man手册使用

man man:查看man手册使用

man 2 open:查看open函数使用

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:路径(绝对路径和相对路径)

 如果要同时使用多个标志,中间使用按位或运算符(‘|’) 连接

Mode一般以八进制出现

 返回值
成功时返回文件描述符,文件描述符是一个非负整数,失败时返回 -1

文件IO与标准IO权限对比

由于指定了0_CREAT因此需要Mode的参与。上面的东西不需要记录需要的时候来查询即可

int fd ;
fd =  open("file.txt", O_RDONLY | O_CREAT, 0664);

printf("%d\r",fd);

函数调用失败打印错误

头文件添加:#include <errno.h>

int fd ;
fd =  open("file.txt", O_RDONLY );

if( fd == -1 )
{
    perror("fail to open:");//perror 里面的只是一个提醒的字符串,自己定义
    return 1;  //非0表示失败
}

printf("%d\r",fd);

close函数

#include <unistd.h>
int close(int fd);
//打开了一个文件,记得关闭掉

 测试一个进程最多能产生多少个文件描述符

 文件描述符值的规律

 write函数

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

 write也可以向终端输出信息--stdout文件描述符为1

向一个文件写数据,count的值最好等于你写进去的字符,不然会出现问题,即使你大于你写进去的也会出现小问题

 read函数

 读数据需要注意的问题

情况1:读取的字符数大于最大一次读取字节数,那么只会读取最后一个字节,比如读取helloworld,读取为5,那么最后读取的是hello

情况2:读取的字符数小于最大一次读取字节数,那只会读取输入的数据加换行符,比如读取hell,读取是5,那么最后读取的是hell加换行符

 lseek函数

文件IO函数的重点就是lseek,因为write和read操作的都是以读写指针(就存在偏移量了)开始,默认open一次,其读写指针在开头

情况:open一次,然后write一次,此时读写指针移动到最后,如果此时读取的话,那么就会失败,因为读写指针没有在开头.如果加lseek重新移动的话,那么就会成功

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <stdio.h>

void Print_Error(int ret, const char *str )
{
    if ( ret == -1 )
    {
        perror(str);
        return 1;
    }
    else
    {
        printf("ret = %d\n",ret);
    }
    

}
int main()
{
    int fd;
    ssize_t wret;
    ssize_t rret;
    char str[30];

    fd = open("file.txt", O_RDWR | O_CREAT | O_TRUNC , 0664 );
    Print_Error( fd, "fail to open" );

    wret = write( fd, "hello world\n", 16 );
    //lseek(fd, 0, SEEK_SET);
    rret = read( fd, str, 20);
    printf("rret = %d\n",rret);
    printf("%s\n",str);

    close(fd);
    
    return 0;
}

 remove函数 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152469.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何准备pmp考试?

一、考前五准备 1.知识准备&#xff1a;读透教材&#xff0c;仔细回顾知识点&#xff0c;明确知识框架&#xff0c;模考题考前正确率达到95%。 2.精神准备&#xff1a;明确目标&#xff0c;有信心&#xff0c;不要焦虑。 3.精力准备&#xff1a;科学安排考前的复习和休息时间…

【nvivo11plus教程】03_查询+自动编码

注&#xff1a;nvivo11也可以使用自动编码的。我是在第一次使用自动编码的时候&#xff0c;它弹出来一个界面让我下载安装包&#xff0c;但是网速特别慢&#xff0c;需要5、6个小时&#xff0c;然后我电脑开了一个晚上&#xff0c;第二天早上显示下载失败&#xff0c;但是可以使…

十一、路由

一、前端路由的概念与原理 1.1、什么是路由 路由&#xff08;英文&#xff1a;router&#xff09;就是对应关系。 1.2、SPA与前端路由 SPA 指的是一个web网站只有唯一的一个HTML页面&#xff0c;所有组件的展示与切换都在这唯一的一个页面内完成。此时&#xff0c;不同组件…

【 java 集合】Collections工具类的使用

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…

python基础语法二

一、条件判断 1.1 if…else…语句 if…else… 字面意思就是 如果…否则… num 3 # 通过取模运算判断num是否能被2整除 if num % 2 0:print(str(num) "是一个偶数") else:print(str(num) "是一个奇数")注意两条print语句前面的缩进 1.2 elif 当你有三…

DP4809国产双通道耳机音频功率放大器芯片兼容替代LM4809

目录DP4809简介参考原理图DP4809芯片特性DP4809简介 DP4809是带关机功能的双通道耳机音频功率放大器芯片。在5V输入工作电压下&#xff0c;负载 16Ω时&#xff0c;平均输出功率为 140mW&#xff0c;总谐波失真 THDN 小于0.1%。当 SHUTDOWN 管脚电压为 GND 时&#xff0c;芯片…

小程序技术科普:运行机制安全机制

接触小程序有一段时间了&#xff0c;总得来说小程序开发门槛比较低&#xff0c;但其中基本的运行机制和原理还是要懂的。 了解小程序的由来 在小程序没有出来之前&#xff0c;最初微信WebView逐渐成为移动web重要入口&#xff0c;微信发布了一整套网页开发工具包&#xff0c;称…

Windows安装Pytorch+CUDA环境

文章目录前言创建Python虚拟环境安装CUDA安装Pytorch参考资料前言 本文将介绍使用 conda 创建Python虚拟环境&#xff0c;安装Pytorch和CUDA依赖。 创建Python虚拟环境 conda常用命令&#xff1a; conda create -n poppy_leo_tf python3.7 # 创建虚拟环境 conda activate p…

grafana关闭缓存

如果把Prometheus配置文件中的一些端口删除再重启服务&#xff0c;虽然Prometheus中更新了数据&#xff0c;但是grafana中的缓存会存在很长时间。 在官方文档[数据源管理|格拉法纳文档 (grafana.com)](https://grafana.com/docs/grafana/latest/administration/user-managemen…

Leetcode - 19 - 删除链表的倒数第 N 个结点

19. 删除链表的倒数第 N 个结点 题目描述 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;head [1],…

【Dash搭建可视化网站】项目11:世界自杀率数据看板

世界自杀率数据看板1 项目效果图2 项目架构3 文件介绍和功能完善3.1 assets文件夹介绍3.2 app.py和index.py文件完善3.3 header.py文件完善3.4 api.py/api.ipynb文件完善3.4.1 获取Dropdown组件中的下拉标签信息3.4.2 获取Rangeslider组件中的时间区间3.4.3 获取Checklist组件中…

【 Vue3 + Vite + setup语法糖 + Pinia + VueRouter + Element Plus 第五篇】【完结篇附源码】

在第四篇中我们学习了mixin 公共方法封装&#xff0c; VueRouter 的使用以及配置权限路由&#xff0c;本期我们将讲述 Pinia,并使用 Pinia 和 Axios接口数据完成登录功能以权限路由改造 本期需要掌握的知识如下: Pinia 在项目中的使用及 持久化使用 Pinia 和 Axios 完成 登录 …

VIMA: General Robot Manipulation with Multimodal Prompts

Paper name VIMA: General Robot Manipulation with Multimodal Prompts Paper Reading Note URL: https://arxiv.org/pdf/2210.03094.pdf Project URL: https://vimalabs.github.io/ ICLR review URL: https://openreview.net/forum?idhzjQWjPC04A TL;DR ICLR 2023 在投…

动态 json 转化序表

【问题】Hi,I have a problem very similar tohttp://community.jaspersoft.com/questions/844023/need-help-looping-throu…,but I can’t just change the json file as done by the person asking that question.Any help would be greatly appreciated.----I am trying to…

深入学习IO多路复用select/poll/epoll实现原理

这里写自定义目录标题参考概述1. Linux 怎样处理网络请求1.1 阻塞 IO1.2 非阻塞 IO1.3 IO 多路复用2. 详解 select、poll、epoll 实现原理2.1 select 实现原理2.2 poll 实现原理3. 总结参考 深入学习IO多路复用select/poll/epoll实现原理 概述 Linux 服务器处理网络请求有三…

Java基础算法每日5道详解(4)

101. Symmetric Tree 对称树 Given the root of a binary tree, check whether it is a mirror of itself (i.e., symmetric around its center). Example 1: Input: root [1,2,2,3,4,4,3] Output: trueExample 2: Input: root [1,2,2,null,3,null,3] Output: falseleetco…

Linux常用命令——nl命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) nl 在Linux系统中计算文件内容行号 补充说明 nl命令读取 file 参数&#xff08;缺省情况下标准输入&#xff09;&#xff0c;计算输入中的行号&#xff0c;将计算过的行号写入标准输出。在输出中&#xff0c;n…

牛啊~ 长这么大还是头一次见24W字的SpringBoot从入门到实战文档

牛啊&#xff01;长这么大还是头一次见24W字的SpringBoot从入门到实战文档&#xff01; 不服还真不行&#xff0c;因为这份文档包含的内容是又全又新&#xff0c;而且还特别高深&#xff0c;从入门到实战的内容全都有&#xff01;&#xff01; 继续往下看&#xff1a; 本文档从…

EMQ设定ACL规则来控制客户端对主题的订阅权限

实现原理&#xff1a;EMQ可以通过制订ACL规则&#xff0c;校验客户端每个发布(Publish)/订阅(Subscribe) 的权限 本次采用的是EMQ Mnesia ACL。使用 EMQ X 内置的 Mnesia 数据库存储 ACL 规则 测试过程&#xff1a; 1本次实验环境&#xff0c;1个服务端&#xff08;发布1个主…

NumPy一维数组、二维数组与Pandas的Series、DataFrame行列结构和横纵方向的统一说明

最近在这个问题上耽误了一些时间&#xff0c;原因是之前个人理解上出了一些偏差&#xff0c;又受到错误文章的误导&#xff0c;把这个问题搞复杂了&#xff0c;现在统一梳理一下。在展开之前&#xff0c;先明确说明的是&#xff1a;NumPy的二维数组与Pandas的DataFrame&#xf…