Linux应用编程
文章平均质量分 78
.
Acuity.
只要思想不滑坡,想法总比问题多。
展开
-
通过sysinfo获取Linux系统状态信息
sysinfo是获取linux系统状态信息的利器。原创 2021-07-31 22:25:37 · 3150 阅读 · 0 评论 -
open函数簇与fopen函数簇区别和用法
linux系统下,可以通过open函数簇和fopen函数簇访问文件,两种访问方式具有不同的特性和访问效率。原创 2021-02-27 22:15:32 · 721 阅读 · 0 评论 -
【Linux应用编程】一个异步信号处理引起死锁问题的思考
Linux信号异步处理引起的死锁问题思考,及编写安全信号回调函数的注意事项。原创 2020-12-29 20:40:35 · 1023 阅读 · 3 评论 -
【Linux应用编程】Linux编程中常见错误码含义及查询方式
本文描述linux程序开发中返回的错误码具体含义和查询方式。原创 2020-09-09 00:16:46 · 5004 阅读 · 0 评论 -
【Linux应用编程】framebuffer设备应用编程实例
帧缓冲设备(framebuffer device)是linux系统抽针对显示设备抽象出来的一个字符设备,向上为用户层提供统一的访问接口,向下屏蔽底层各类硬件显示设备的差异。原创 2020-08-09 00:29:07 · 1711 阅读 · 1 评论 -
【Linux应用编程】基于UNIX域套接字的进程间通信
用于本地进程间通信的套接字称为unix域套接字(unix domain socket)原创 2020-07-23 23:52:49 · 2540 阅读 · 0 评论 -
【Tools】Linux串口设备调试技巧(sftty)
串口设备是linux系统中最基本的设备之一,在嵌入式linux开发中几乎是必不可少的。由于串口使用简单、广泛,除了使用一路串口作为调试终端输出外,还会使用串口作为外部设备的连接总线。原创 2020-07-14 23:55:14 · 3046 阅读 · 0 评论 -
【代码调试】Linux coredump分析
linux系统中某个进程突然崩溃终止,该从哪方面入手分析问题?原创 2020-06-11 22:19:58 · 8701 阅读 · 0 评论 -
【代码质量】如何使用Valgrind检测内存泄漏
内存泄露一直是C/C++程序的棘手问题,致命但又隐晦,不易揪出来;工欲善其事必先利其器,借助Valgrind工具能够快速检测出内存泄露位置。原创 2020-06-03 12:27:00 · 6803 阅读 · 2 评论 -
【代码调试】几个实用的Linux应用程序调试技巧
Linux下执行某程序提示文件不存在,但文件确实存在,该怎么办?原创 2020-05-31 00:41:04 · 905 阅读 · 0 评论 -
【Linux应用编程】POSIX线程互斥与同步机制—消息队列
消息队列可以用于多个进程(线程)间传递一定量的不固定长度的信息,以此达到交换数据的目的。原创 2020-05-29 00:16:56 · 1095 阅读 · 0 评论 -
【Linux应用编程】POSIX线程互斥与同步机制—信号量
POSIX信号量分为有名信号量和无名信号量;有名信号量用于进程同步,无名信号量用于线程同步;信号量典型应用于“生产者—消费者”模型中。原创 2020-05-27 17:15:53 · 723 阅读 · 0 评论 -
【Linux应用编程】POSIX线程互斥与同步机制—屏障
与互斥锁、读写锁、自旋锁不同,屏障不是用来保护共享资源的,屏障是协调多个线程同步执行而使得某一线程进入等待状态的一种同步机制。原创 2020-05-26 16:11:45 · 556 阅读 · 0 评论 -
【Linux应用编程】POSIX线程互斥与同步机制—自旋锁
自旋锁是一种轻量级的互斥锁,对于“极短加锁时间”的多线程互斥场景,自旋锁是理想的选择。原创 2020-05-25 21:44:03 · 709 阅读 · 0 评论 -
【Linux应用编程】POSIX线程互斥与同步机制—读写锁
对于“读多写少”的多线程应用场景,应该选择使用读写锁互斥机制,而不是互斥锁。原创 2020-05-23 17:40:45 · 532 阅读 · 0 评论 -
【Linux应用编程】POSIX线程互斥与同步机制—条件变量
条件变量为什么要和互斥锁一起使用?原创 2020-05-23 00:00:00 · 745 阅读 · 0 评论 -
【Linux应用编程】POSIX线程互斥与同步机制—互斥锁
互斥锁是最简单的互斥机制,但使用起来一点都不简单。原创 2020-05-21 16:20:38 · 1120 阅读 · 0 评论 -
【Linux应用编程】互斥与同步要点
linux作为一个多用户多任务的操作系统,多个任务可能并行访问同一资源或者存在依赖先后顺序关系。原创 2020-05-19 17:09:52 · 525 阅读 · 0 评论 -
【Linux应用编程】POSIX线程基本属性及如何使用
线程基本属性包括,分离状态、调度策略、继承性、作用域、优先级、堆栈信息,即使默认属性能满足大部分场合,面对苛刻场景仍有必要调整线程各项属性值。原创 2020-05-18 15:39:10 · 579 阅读 · 0 评论 -
【Linux应用编程】POSIX线程基本操作
POSIX线程(POSIX threads),简称Pthreads,是POSIX标准中对线程定义的一部分标准规范。Pthreads定义了创建和操作线程的一整套API,在编写程序时,只有遵循Pthreads规范,那么这段程序就是可以在任何支持Pthreads的操作系统上运行,实现优良的跨平台特性。原创 2020-05-16 15:44:47 · 926 阅读 · 0 评论 -
线程的3种实现方式--内核级线程, 用户级线程和混合型线程
之前讲解过内核线程、轻量级进程、用户线程三种线程概念解惑(线程≠轻量级进程), 但是一直对其中提到的线程的实现模型比较迷惑, 这次就花了点时间怎么学习了一下子1 线程的3种实现方式在传统的操作系统中,拥有资源和独立调度的基本单位都是进程。在引入线程的操作系统中,线程是独立调度的基本单位,进程是资源拥有的基本单位。在同一进程中,线程的切换不会引起进程切换。在不同进程中进行线程切换,如从...转载 2020-04-25 23:16:46 · 1342 阅读 · 2 评论 -
【Linux应用编程】mmap内存映射
linux操作系统采用虚拟内存管理技术,把内存空间分为用户空间和内核空间,用户空间由用户进程使用,用户进程无法直接访问内核空间,只能通过系统调用(软中断)或者硬中断间接访问。对于32位linux系统来说,系统物理内存最大寻址范围是<code>2^32=4GB</code>,用户空间分配的大小是3GB,地址范围是0x0——0xbfffffff;内核空间是1GB,地址范围是0xc0000000——0xffffffff。原创 2020-03-31 23:54:11 · 2816 阅读 · 1 评论 -
【Linux应用编程】线程私有数据
进程是操作系统资源分配的基本单位,线程是任务调度和执行的基本单位。不同进程拥有独立的代码空间和内存资源,同一进程下的线程是共享进程的系统资源。 假设在某个情景下,一个线程内部各个函数需访问同一数据(内存空间),线程各个函数是独立的。对于该情景下,一般考虑到的是用全局或者静态变量。功能上是满足,但由于进程内所有线程是共享进程的资源的,全局或者静态变量会暴露为其他线程,降低程序的健壮性。 ...原创 2020-03-27 22:43:43 · 287 阅读 · 0 评论 -
【Linux应用编程】C++深拷贝和浅拷贝
1 拷贝构造函数 拷贝构造函数是一种特殊的构造函数,其功能是在创建新对象时,将已创建的同类对象赋值给新创建的对象。 拷贝构造函数一般应用在几个方面:调用同类型的对象初始化新创建的对象一个对象复制函数入口形参为类对象一个对象复制函数,返回值为类对象1.1 默认拷贝构造函数 如果类中没有显式定义拷贝构造函数,编译器会默认定义一个,即默认拷贝构造函数。1.2 拷贝构造函数...原创 2020-03-24 23:30:18 · 410 阅读 · 0 评论 -
【Linux 网络编程】TCP poll聊天程序
实现目标【1】创建TCP服务器和客户端,实现简易聊天程序;【2】单一进程,通过I/O复用poll函数实现;【3】客户端/服务器任一结束,结束连接和对方进程。poll函数 poll函数和select函数调用的本质一样的,也是对所有监听文件描述符进行轮询,有事件发生则返回。与select不同的是,poll监听文件描述符数目没有限制,poll执行完不会清空文件描述符集合,也就是不需每次都...原创 2019-08-24 17:42:46 · 657 阅读 · 0 评论 -
【Linux网络编程】TCP select聊天程序
实现目标【1】创建TCP服务器和客户端,实现简易聊天程序;【2】单一进程,通过I/O复用select函数实现;【3】客户端/服务器任一结束,结束连接和对方进程。select函数 Linux系统中I/O复用实现方式有selece()、poll()、epoll()。I/O复用可以使单一进程可以同时监听多个文件描述符(句柄)事件的发生,而不用建立多个进程,在特殊情况下可以节约系统资源,但牺...原创 2019-08-23 00:10:51 · 649 阅读 · 0 评论 -
【Linux 网络编程】TCP多进程聊天程序
实现目标【1】创建TCP服务器和客户端,实现简易聊天程序;【2】数据收发单独进程实现;【3】客户端/服务器任一结束,结束连接和对方进程。服务器端(server)#include <stdio.h>#include <stdlib.h>#include <string.h>#include <netinet/in.h>#include...原创 2019-08-21 23:41:35 · 590 阅读 · 0 评论 -
【Linux应用编程】一文弄懂Linux守护进程
守护进程 守护进程(daemon)是一类在后台运行的特殊进程,守护进程特点是,不受任何终端控制、不受用户登录注销影响。通常在系统启动的时候启动,仅在系统运行结束后才终止。 可以通过“ps ajx”命令查看系统的守护进程,其中TPGID为-1的就是守护进程。守护进程作用 守护进程在后台中周期性地执行某种特殊任务;或者等待某些发生地事件而唤醒该进程进程处理世界,处理完则进入休眠。【1...原创 2019-08-06 00:08:07 · 386 阅读 · 0 评论 -
【Linux应用编程】一文掌握Linux C/C++调用shell命令后获取返回值
最近在维护老项目时,发现项目中C/C++调用shell命令后,某系处理返回值的过程是以“临时文件”的方式进行;即shell命令执行后将返回值存放在临时文件(如temp.txt),C/C++程序再访问文件,获取shell的返回值。最经典的就是调用WiFi(iwlist wlan0 scan )扫描指令查询WiFi节点,然后解析获取WiFi数量、名称、信号强度、加密方式等信息。 通过“临时文件...原创 2019-07-21 22:45:25 · 1712 阅读 · 0 评论 -
【Linux应用编程】一文弄懂Linux僵尸进程
僵尸进程 僵尸进程一般出现在子进程中。如果子进程先于父进程退出,父进程没有调用wait()/waitpid()函数等待子进程结束来回收子进程资源,此时子进程处于“僵尸状态”,占用进程号和系统资源。可以通“ps”命令查看是否存在僵尸进程, 带有“< defunct >”标识的就是僵尸进程。引起原因 一个进程在调用exit()函数结束时,并没有真正的被销毁,部分占用的系统资源、...原创 2019-07-31 23:45:23 · 529 阅读 · 0 评论 -
TCP/IP协议三次握手与四次挥手流程解析
1.TCP报文格式TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。 下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。 (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,A转载 2017-08-19 10:55:20 · 612 阅读 · 0 评论 -
socket 详解
我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的。本文的主要内容如下:1、网络中进程之间如何通信?2、Socket是什么?转载 2017-08-18 16:55:43 · 672 阅读 · 0 评论 -
一个适用各类场合的Makefile模板
1.写在前面 对于Windows下开发,很多IDE都集成了编译器,如Visual Studio,提供了“一键编译”,编码完成后只需一个操作即可完成编译、链接、生成目标文件。Linux开发与Windows不同,Linux下一般用的的gcc/g++编译器,如果是开发ARM下的Linux程序,还需用到arm-linux-gcc/arm-linux-g++交叉编译器。Linux下也可以实现“一键编译...原创 2019-05-29 23:57:25 · 4514 阅读 · 1 评论 -
localtime函数在不同平台使用注意
1.写在前面 localtime函数是C语言标准库中时间库“time.h”中获取系统带时区时间的函数,获得的时间最终以“strcut tm”的格式输出。对于通用操作系统如Windows、Linux中调用该函数,那么获得的时间就是带时区的,这一点毫无疑问。而在一些嵌入式场合,我们也需用到将时间戳转换成“年月日时分秒”格式,如不额外自行编写换算函数,可以直接调用该函数。在以往开发非联网或者国内使用...原创 2018-12-17 23:56:28 · 6751 阅读 · 2 评论 -
Linux启动脚本rcS
1. 写在前面 Linux系统作为一个高级系统,其调度机理、调度链路非常复杂,仅仅是初启动阶段就非常复杂。如果要深究Linux系统的启动服务,需要理解Linux系统原理、文件管理、脚本链接等。但,如果是作为初学者,以“使用”为目的时,比如“期望在系统启动的时候自动执行指定程序”,则只需知道如何配置启动脚本即可。正比如,学开车,一开始并不需要知道发动机是如何工作的,会操控即可。2. 启动脚本...原创 2018-11-25 23:08:00 · 9178 阅读 · 0 评论 -
VMware下Linux与Windows共享文件
Linux下开发用的是虚拟机(VMware),没有用专门的Linux系统主机,主要是大部分工作还是在Windows下开发,甚至很多时候习惯在Windows下编码,然后转到Linux下编译。因此,经常需要用到Linux与Windows共享文件的功能。最近由于更换了新的开发主机,发现新主机下无法实现共享文件的功能。印象中,在此之前,搭建虚拟机环境时已经遇到过类似的问题,但由于未有作相关记录,只能从...原创 2018-03-26 23:22:28 · 14294 阅读 · 0 评论 -
Linux系统编程——I/O多路复用select、poll、epoll的区别使用
I/O 多路复用技术是为了解决进程或线程阻塞到某个 I/O 系统调用而出现的技术,使进程不阻塞于某个特定的 I/O 系统调用。select(),poll(),epoll()都是I/O多路复用的机制。I/O多路复用通过一种机制,可以监视多个描述符,一旦某个描述符就绪,能够通知程序进行相应的读写操作。转载 2018-01-19 14:27:52 · 530 阅读 · 0 评论 -
Linux下读取USB扫描枪数据
1.USB扫描枪 USB接口的扫描枪相当于键盘输入,在Windows或者Linux下,在成功安装驱动的前提下,打开文件编辑器如word、txt等。扫描枪读出到条码数据时,数据即被捕获到光标处。2.Linux下读取数据2.1扫描枪设备 USB扫描枪相当于一个键盘输入设备,Windows或者Linux下都集成相关驱动,或者免驱动。基于ARM下的Linux系统,接入扫描枪,在“/de原创 2018-01-31 17:52:00 · 11387 阅读 · 7 评论 -
Linux下/Qt UTF-8转GB2312
1.背景项目需要用到热敏打印机,控制接口为串口(RS232),运行环境为Linux+Qt。在此之前,在MCU平台的实时系统(RT-Thread)上已经实现出正确的打印功能,原则上把代码移植过来,调整下打印位置、字体大小等即可。代码移植后,运行结果是英文、数字打印正常,中文打印则出现乱码。现有的配置情况是,热敏打印机提供的英文、数字字库是ASII格式,中文字库是GB2312格式,平台控制端采用U...原创 2017-11-14 09:29:26 · 2659 阅读 · 0 评论 -
ARM Linux判断SD卡是否加载成功
1、写在前面ARM-Linux在访问SD卡数据时,严格的步骤,第一步应该是检查SD卡是否被系统成功加载。当然,缺少这一步也不影响,从后面应用层访问操作的返回值也可知道操作状态,但如果在第一部就有检查时,出现问题可以立刻发现。2、判断SD卡加载状态1)通过“sdcard”文件夹Linux下如果加载SD卡成功,在根目录下会生成一个“sdcard”文件夹,SD卡的内容,及用户访问数据,都通过这个文件夹。...原创 2018-01-03 16:49:47 · 8505 阅读 · 1 评论