嵌入式Linux应用编程
文章平均质量分 64
基于linux去做应用编程,其实就是通过调用linux的系统API来实现应用需要完成的任务
wwwlyj123321
这个作者很懒,什么都没留下…
展开
-
C/C++ 修改系统时间导致sem_timedwait阻塞
ref:c++ - sem_timedwait with CLOCK_MONOTONIC_RAW/CLOCK_MONOTONIC - Stack Overflowhttps://www.cnblogs.com/xiaolincoding/p/11369715.htmlsem_timedwait 和修改系统时间_monotonic system-wide clock-CSDN博客原创 2024-05-18 00:59:12 · 159 阅读 · 0 评论 -
fd信息查看
一、/proc/pid/fdinfo和/proc/pid/fd的含义。原创 2023-12-10 23:16:43 · 530 阅读 · 0 评论 -
linux写文件如何保证落盘?
除了同步文件的修改内容(脏页),fsync还会同步文件的描述信息(metadata,包括size、访问时间等等),因为文件的数据和metadata通常存在硬盘的不同地方,因此fsync至少需要两次IO写操作,多余的一次IO操作,根据Wikipedia的数据,当前硬盘驱动的平均寻道时间(Average seek time)大约是3~15ms,7200RPM硬盘的平均旋转延迟(Average rotational latency)大约为4ms,因此一次IO操作的耗时大约为10ms左右。原创 2023-11-05 22:12:01 · 594 阅读 · 0 评论 -
vscode中注释多行bash脚本
选择你想取消注释的行,在所选行上点击右键,从命令调色板中选择。选择你要注释的行,右击所选的行,从命令调色板中选择。选择后,所选的行将被注释为'#',如下图所示。,就可以从之前被注释的行中删除'#'。原创 2023-10-13 18:01:53 · 489 阅读 · 0 评论 -
Linux system函数返回值
阶段 2:调用 / bin/sh 拉起 shell 脚本,如果拉起失败或者 shell 未正常执行结束(参见备注 1),原因值被写入到 status 的低 8~15 比特位中。所以,我们在 shell 脚本中不能将 127,126 等数值定义为返回值,否则无法区分中是 shell 的返回值,还是调用 shell 脚本异常的原因值。(2)shell 返回值:指 system 所调用的 shell 命令的返回值,比如上例中,test.sh 中返回的值为 shell 返回值。如果失败,返回 - 1。原创 2023-10-13 11:01:48 · 1248 阅读 · 0 评论 -
Linux信号量详解
信号量的本质是一种数据操作锁、用来负责数据操作过程中的互斥、同步等功能。信号量就和互斥锁类似,本质上就是一个计数器(全局变量)。不同之处在于,互斥锁的值只有 2 个(加锁 "lock" 和解锁 "unlock"),而信号量的值可以根据实际场景的需要自行设置(取值范围为 ≥0)。当有进程对它所管理的资源进行请求时,进程先要读取信号量的值,大于0,资源可以请求,等于0,资源不可以用,这时进程会进入睡眠状态直至资源可用。原创 2023-03-07 10:00:42 · 1480 阅读 · 0 评论 -
POSIX Timer
通常,这个成员的值为SIGEV_SIGNAL,这个值说明在定时器到期时,会产生一个信号。程序可以将成员 evp->sigev_notify设为SIGEV_NONE来防止定时器到期时产生信号。如果evp为 NULL,那么定时器到期会产生默认的信号,对 CLOCK_REALTIMER来说,默认信号就是SIGALRM。如果要产生除默认信号之外的其它信号,程序必须将 evp->sigev_signo设置为期望的信号码。4、POSIX Timer 是针对有实时要求的应用所设计的,接口支持 ns 级别的时钟精度。原创 2022-12-20 16:40:38 · 744 阅读 · 0 评论 -
linux 函数中打印调用栈
【代码】linux 函数中打印调用栈。原创 2022-10-26 10:34:38 · 563 阅读 · 0 评论 -
SPI总线传输的4种模式
在芯片的资料上,有两个非常特殊的寄存器配置位,分别是 CPOL (Clock POlarity)和 CPHA (Clock PHAse)。极性和相位,这么专业的名词,非常难理解。我们不妨从时序图入手,了解极性和相位的效果。转载 2022-10-13 21:54:05 · 807 阅读 · 0 评论 -
信号机制和Android natvie crash捕捉
所有的符合Unix规范(如POSIX)的系统都统一定义了SIGNAL的数量、含义和行为。Android代码中,signal的定义一般在 signum.h(Android代码中,signal的定义一般在 signum.h)中。原创 2022-09-27 17:16:00 · 569 阅读 · 0 评论 -
Linux---使用nice、cpulimit 和 cgroups管理系统资源
进程调度是linux中非常重要的概念。linux内核有一套高效复杂的调度机制,能使效率极大化,但有时为了实现特定的要求,需要一定的人工干预。比如,你希望操作系统能分配更多的CPU资源给浏览器进程,让浏览速度更快、更流畅,操作体验更好。那具体应该怎么做呢?尽管linux的进程调度算法十分复杂,但都是以进程的优先级为基础的,我们需要由用户为内核指定进程的优先级。大部分进程启动时的优先级是相同的,因此Linux内核会公平地进行调度。如果想让一个CPU密集型的进程运行在较低优先级,那就需要事先配置好调度器。原创 2022-09-17 17:40:21 · 1087 阅读 · 0 评论 -
linux如何使 CPU使用率 保持在指定百分比?
taskset命令用于设置进程(或 线程)的处理器亲和性(Processor Affinity),可以将进程(或 线程)绑定到特定的一个 或 多个CPU上去执行,而不允许将进程(或 线程)调度到其他的CPU上。dd if=/dev/zero of=/dev/null 运行dd命令, 输出到/dev/null, 实际上仅仅占用CPU, 没有IO操作.因为连续运行N个(N是CPU个数)的dd 命令, 且使用率为100%, 这时调度器会调度每一个dd命令在不同的CPU上处理.就是循环运行命令,从1到N。原创 2022-09-17 10:50:15 · 3359 阅读 · 0 评论 -
linux文件夹操作函数
(1)、DIR结构体指针,该结构是一个内部结构,保存所打开的目录的信息,作用于类似于FILE结构。(2)、函数出错,返回NULL。1、作用:打开一个目录。原创 2022-08-31 10:35:25 · 615 阅读 · 0 评论 -
linux获取时间
monotonic time字面意思是单调时间,实际上它指的是系统启动以后流逝的时间,这是由变量jiffies来记录的。jiffies一定是单调递增的,因为时间不够逆嘛!wall time字面意思是挂钟时间,实际上就是指的是现实的时间,这是由变量xtime来记录的。系统每次启动时将CMOS上的RTC时间读入xtime,这个值是"自1970-01-01起经历的秒数、本秒中经历的纳秒数",每来一个timer interrupt,也需要去更新xtime。......原创 2022-08-03 19:47:33 · 434 阅读 · 0 评论 -
arm-linux-gnueabi工具集
在调用动态库的时候,经常出现由于动态库接口修改或者版本不匹配导致调用动态库找不到函数接口符号的情况。1.由于c++动态库编译没有加extern c导致函数编译时加了c++的前缀的;这个时候就可以用nm命令看so中是否有提示找不到的符号。3.库的版本不对,老版本的库确实没有新加的接口。2.系统中有多个库,程序加载了其他路径的库;...原创 2022-08-03 14:59:17 · 299 阅读 · 0 评论 -
Android 中的property_get/property_set
属性(property)被大量使用在Android系统中,用来记录系统设置或进程之间的信息交换。属性是在整个系统中全局可见的。每个进程可以get/set属性。在系统初始化时,Android将分配一个共享内存区来存储的属性。。“init”守护进程将启动一个属性服务。属性服务在“init”守护进程中运行。每一个客户端想要设置属性时,必须连接属性服务,再向其发送信息。属性服务将会在共享内存区中修改和创建属性。任何客户端想获得属性信息,可以从共享内存直接读取。属性将会以上述顺序加载。net.*“属性中。...转载 2022-07-31 09:56:13 · 1729 阅读 · 0 评论 -
esp idf protocomm
1、调用 protocomm_new api创建一个protocomm实例2、调用protocomm_add_endpoint 给实例添加一个回调函数3、调用protocomm_req_handle api给protocomm实例发送请求(实际上就是调用第二步绑定的那个回调函数)实际上数据接受,命令处理,数据返回都是在函数data_transfer_handler中进行处理的!esp_hosted_config_command_dispatcher执行命令,返回命令.........原创 2022-05-11 02:34:28 · 365 阅读 · 0 评论 -
select()函数
fd_set* writefds:是指向fd_set结构的指针,这个集合中应该包括文件描述符,我们是要监视这些文件描述符的写变化的,即我们关心是否可以向这些文件 中写入数据了,如果这个集合中有一个文件可写,select就会返回一个大于0的值,表示有文件可写,如果没有可写的文件,则根据timeout参数再判 断是否超时,若超出timeout的时间,select返回0,若发生错误返回负值。可以传入NULL值,表示不关心任何文件的写变化。第三.select 返回值:负值:select错误正值:某些文件.原创 2022-04-13 09:26:30 · 1146 阅读 · 0 评论 -
TOMBSTONE分析笔记
ref:tombstone分析笔记01 - 反汇编篇 - 灰信网(软件开发博客聚合)https://source.android.com/devices/tech/debugAndroid Stability - tombstone日志 - 简书原创 2022-03-31 16:20:17 · 2376 阅读 · 0 评论 -
core dump
一、简介当linux程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump。我们可以认为 core dump 是“内存快照”,但实际上,除了内存信息之外,还有些关键的程序运行状态也会同时 dump 下来,例如寄存器信息(包括程序指针、栈指针等)、内存管理信息、其他处理器和操作系统状态和信息。core dump 对于编程人员诊断和调试程序是非常有帮助的,因为对于有些程序错误是很难重现的,例如指针异常,而 core dump 文件可以再现程原创 2021-12-27 21:38:08 · 816 阅读 · 0 评论 -
linux文件共享
预备知识:https://blog.csdn.net/wwwlyj123321/article/details/100298377一、什么是文件共享(1)文件共享就是同一个文件(同一个文件指的是同一个inode,同一个pathname)被多个独立的读写体(几乎可以理解为多个文件描述符)去同时(一个打开尚未关闭的同时另一个去操作)操作。(2)文件共享的意义有很多:譬如我们可以通过文件...原创 2019-09-02 15:35:34 · 319 阅读 · 0 评论 -
linux文件管理(inode、文件描述符表、文件表)
一、inode(索引节点)(1) 理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。“块"的大小,最常见的是4KB,即连续...原创 2019-09-02 15:59:14 · 9777 阅读 · 2 评论 -
strerror()、perror()、errno
(1)errno就是error number,是由OS来维护的一个全局变量,任何OS内部函数都可以通过设置errno来告诉上层调用者究竟刚才发生了一个什么错误。linux系统中对各种常见错误做了个编号,当函数执行错误时,函数会返回一个特定的errno编号来告诉我们这个函数到底哪里错了。(2)errno本身实质是一个int类型的数字,举例如下,每个数字编号对应一种错误。#define EP...原创 2019-09-03 09:26:54 · 1710 阅读 · 0 评论 -
linux重定向
一、使用close()和dup2()完成标准输出重定向:(1)0、1、2这三个fd被标准输入、输出、错误通道占用。(2)我们可以close(1)关闭标准输出,关闭后我们printf输出到标准输出的内容就看不到了(3)然后我们可以使用dup2重新分配得到1这个fd,这时候就把oldfd打开的这个文件和我们1这个标准输出通道给绑定起来了。这就叫标准输出的重定位。#include &l...原创 2019-09-03 10:08:51 · 338 阅读 · 0 评论 -
linux进程(一)——什么是进程?
一、什么是进程?一般来讲,进程定义为正在运行的程序的实例,简单地说,进程就是一个正在运行的程序。 ==程序== (program):通常为二进制,放置在储存媒体中 (如硬盘、光盘、软盘、磁带等), 为实体文件的型态存在; ==进程== (process):程序被触发后,运行者的权限与属性、程序的程序码与所需数据等都会被加载内存中, 操作系统并给予这个内存内的单元一个识别码 (P......原创 2019-09-03 11:36:23 · 4158 阅读 · 0 评论 -
linux进程(二)——如何创建进程?
一、如何创建进程?linux通过fork()系统调用创建新一个进程,老进程叫父进程,复制生成的新进程叫子进程。父子关系是相对的,每一代都有一个父子关系。fork函数定义如下:#include <unistd.h>pid_t fork(void);实例1:#include <unistd.h> #include <stdio.h>...原创 2019-09-03 15:47:25 · 1697 阅读 · 0 评论 -
linux进程(三)——如何终止进程?
一、如何终止进程?终止一个进程大致有以下几种情况:(1)函数执行完毕,main函数正常return;(2)使用linux提供的退出进程相关的函数:exit()、_exit()、atexit()、on_exit()exit()的作用是退出当前进程,并且尽可能释放当前进程占用的资源_exit()的作用也是退出当前进程,但是不试图释放当前进程占用的资源,而且_exit()终止进程的...原创 2019-09-03 17:22:04 · 9007 阅读 · 0 评论 -
linux进程(四)——进程的几种状态
/usr/src/linux-headers-4.15.0-45/include/linux/* Used in tsk->state: */#define TASK_RUNNING 0x0000#define TASK_INTERRUPTIBLE 0x0001#define TASK_UNINTERRUPTIBLE 0x0002#define __TASK...原创 2019-09-04 14:39:23 · 635 阅读 · 0 评论 -
exec函数族
一、exec函数族简介(1)fork子进程是为了执行新程序(fork创建了子进程后,子进程和父进程同时被OS调度执行,因此子进程可以单独的执行一个程序,这个程序宏观上将会和父进程程序同时进行)(2)可以直接在子进程的if中写入新程序的代码。这样可以,但是不够灵活,因为我们只能把子进程程序的源代码贴过来执行(必须知道源代码,而且源代码太长了也不好控制),譬如说我们希望子进程来执行ls -la...原创 2019-09-10 15:30:11 · 357 阅读 · 0 评论 -
POSIX文件I/O编程
一、POSIX文件I/O与ASCI文件I/OPOSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),不带缓存的文件IO操作,于直接调用系统调用(system call)的方式,高效完成文件输入输出。它以文件标识符(整型)作为文件唯一性的判断依据。ASCI文件I/O:带缓存的文件IO操作,效率低但是易于...原创 2019-08-30 21:56:48 · 1089 阅读 · 0 评论