![](https://img-blog.csdnimg.cn/20200902233652489.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux应用编程
文章平均质量分 63
Linux系统编程相关
欲盖弥彰1314
如有一味绝境,非历十方生死。
展开
-
linux线程间通信支持阻塞的消息队列实现
消息队列消息队列实现并不难。消息队列主要有两种实现方式:数组实现和链表实现。此处采用链表实现。由于实现并不能难,重写浪费时间,直接参考别人的就好了。Linux下消息队列实现Linux下的线程通信没有像RTOS下支持阻塞的消息队列。想要支持阻塞的消息队列就要自己实现了。实现可阻塞的消息队列需要用到pthread中的条件变量(pthread_cond_t )和互斥锁(pthread_mutex_t )。数据结构#define LIN_MSG_MAX_LEN 4096 /* max原创 2022-05-26 22:40:41 · 970 阅读 · 0 评论 -
linux应用开发 —— GPIO控制
GPIO 子系统linux将GPIO的控制抽象成了GPIO子系统。GPIO子系统支持把引脚用于基本的输入输出功能,其中输入功能还支持中断检测。GPIO子系统同样是通过sysfs文件系统控制。查看sysfs下的GPIO子系统内容:ls /sys/class/gpio/export gpiochip128 gpiochip504 gpiochip96gpiochip0 gpiochip32 gpiochip64 unexportGPIO子系统操作导出GPIOx,操作e原创 2022-05-02 23:28:56 · 4531 阅读 · 0 评论 -
iperf3: error - unable to connect to server: No route to host 但嵌入式Linux设备
不精通网络以及iperf3让我不得不求助百度必应,但搜出来千篇一律都是说的防火墙问题,但嵌入式设备Linux系统没有防火墙。因为脚本里设置的WIFI的IP地址是一样,抱着试一试的心态修改了IP地址,一测试可以了。导致换了一台设备用同样的IP地址无法连接AP?用STA模式的设备去连接AP模式的设备才能产生40MH带宽。来测试没问题了,要换一台设备做STA设备。需要一台设备WIFI 设置为STA模式。起初用了一台设备做STA模式设备。做测试没有问题,能正常连上AP。一台设备WIFI设置为AP模式。原创 2023-09-24 09:40:31 · 995 阅读 · 0 评论 -
Linux应用开发 ——看门狗编程
IMX6ULL上的看门狗ls /dev/watchdog*/dev/watchdog /dev/watchdog0<linux/watchdog.h> : watch的ioctl命令#define WATCHDOG_IOCTL_BASE 'W'#define WDIOC_GETSUPPORT _IOR(WATCHDOG_IOCTL_BASE, 0, struct watchdog_info)#define WDIOC_GETSTATUS _IOR(WATCHDOG_IOCTL原创 2022-05-03 06:33:25 · 1528 阅读 · 0 评论 -
linux应用开发 — 控制LED设备
控制LED设备的两种方式通过LED在/dev/下的设备节点控制sysfs 文件系统操作LED设备的属性文件控制 (LED设备驱动必须使用LED子系统实现)sysfs 文件系统sysfs 是一个基于内存的文件系统,同 devfs、proc 文件系统一样,称为虚拟文件系统,它的作用是将内核信息以文件的方式提供给应用层使用sysfs 文件系统的主要功能便是对系统设备进行管理,它可以产生一个包含所有系统硬件层次的视图……简单概括来说就是内核通过sysfs文件系统将内核对象(例如驱动)的属性通原创 2022-05-02 22:42:36 · 1354 阅读 · 0 评论 -
Linux轮询操作--多路复用IO
应用层提供的轮询(多路复用IO)的接口有三个,分别是poll、select、epoll,这三个函数对应了驱动file_operations结构体中的函数成员:__poll_t (*poll) (struct file *, struct poll_table_struct *);select函数原型:int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)原创 2022-03-24 20:49:27 · 250 阅读 · 0 评论 -
Linux网络编程
WhatSocket也是一种IPC,允许同一计算机不同应用程序通信或者不同计算的应用程序通过网络连接进行通信。socket类型有两种:字节流式socket双向可靠面向连接的字节流传输,对应的就是TCP传输数据报socket数据报的消息形式交换,不可靠,无连接,消息到达是无序、重复或者甚至不能到达,对应UDP传输相关系统调用创建套接字#include <sys/types.h> /* See NOTES */#include <sys/soc原创 2020-08-05 09:50:46 · 171 阅读 · 0 评论 -
Linux系统编程——线程安全
线程同步互斥量(互斥锁)保护共享资源的原子访问。访问共享资源的代码段称为临界区。互斥量的死锁线程已将目标互斥量锁定,再次进行加锁会造成两种后果:1、线程死锁,默认情况下线程会发生死锁。2、加锁调用失败,返回EDEADLK错误另一种死锁:线程A:pthread_mutex_lock(&mutex1); //阻塞pthread_mutex_lock(&mutex2); //阻塞线程B:pthread_mutex_lock(&mutex2); //阻原创 2020-07-18 18:19:43 · 206 阅读 · 0 评论 -
Linux系统编程——多线程
线程是独立调度的基本单位。一个进程可以有一个或者多个线程,线程之间共享进程资源。线程分类按调度者分为:用户级线程(User Level Thread,ULT)解决上下文切换问题,调度算法和过程由用户决定存在于用户空间线程创建、撤销以及线程之间的同步、通信无需系统调用来实现同一进程的线程切换不需要内核支持调度以进程为单位优点:线程切换不需要到内核空间,节省内核空间调度算法可以进程专用,亦或用户程序指定用户线程实现与操作系统无关缺点:同一进程一个线程执行系统调用阻塞就导致.原创 2020-07-06 20:40:43 · 211 阅读 · 0 评论 -
Linux系统编程——POSIX IPC
POSIX IPCPOSIX IPC中的xxx_open()中的一些意义相同参数的取值: xxx可以是mq(消息队列)、sem(信号量)、shm(共享内存)参数oflag:O_RDONLY - 可读O_WRONLY - 可写O_RDWR - 可读可写O_CREAT - 队列不存则创建,需要使用mode和attr参数 如果文件存在,mode和attr参数被忽略O_EXCL - 如果使用O_CREAT,消息队列存在则创建失败O_NONBLOCK - 非阻塞模式打开参数mo原创 2020-07-04 02:03:10 · 403 阅读 · 1 评论 -
Linux系统编程——内存映射
内存映射优点与普通文件多写相比能加快读文件/设备的读写速度文件映射创建文件映射步骤:1、使用open()获取文件描述符fd2、将文件描述符fd作为fd参数给mmap()调用mmap()后及时关闭文件描述fd,也不会对映射产生任何影响创建映射#include <sys/mman.h>void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);addr —— 要映射的虚拟内存原创 2020-07-02 10:55:53 · 552 阅读 · 1 评论 -
Linux进程优先级和调度
Linux进程调度算法默认模型循环时间共享调度算法——每个进程轮流使用CPU一段时间,这段时间成为时间片or量子,进程无法直接控制何时使用CPU和使用CPU的时间满足多任务系统两个需求:1、公平性: 每个进程都有机会使用到CPU2、响应度: 一个进程使用CPU前无需等待太长时间进程优先级(nice值)每个进程都有一个nice值,范围为-20~19。数值越小优先级越高,默认为0进程的调度不是按优先级大小进行排序调度的。nice值越高(优先级越小)只会导致该进程占用CPU的时间变少。获取原创 2020-06-28 17:04:51 · 845 阅读 · 3 评论 -
Linux系统编程——监控子进程
在应用程序设计中,有时候父进程需要知道某个子进程的状态(一般都是获取子进程的退出状态,避免其成为僵尸进程)监控子进程的手段:wait()函数及相关系统调用信号SIGCHLD和SIGHLD(两个信号意义是一样的)**wait()及相关系统调用wait()系统调用//头文件#include <sys/wait.h>//调用该函数的进程没有子进程终止,调用将一直阻塞,直至某个子进程终止//有子进程终止,立即返回pid_t wait(int *wstatus);.原创 2020-06-24 17:12:53 · 1145 阅读 · 0 评论 -
Linux系统编程——进程间的通信
每个进程都是独立的实体。一个应用程序有时候要分多个进程协同合作才能完成任务。类似一个团队开发一个项目一样,需要多人合作,合作肯定少不了沟通。一个应用程序可能也要多个进程之间也一样,进程之间有自己的交流的语言——IPC(通信机制)无名管道从名字可知,无名管道没有名字,无法open(),可以read()/write(),所以只能由父进程创建,子进程继承才能使用。读写分离,有两个文件描述符,一个读端,一个写端,所以是半双工工作方式只能用于亲缘进程之间通信(父子、兄弟)写操作无原子性,多进程写入就会.原创 2020-05-26 14:47:34 · 375 阅读 · 2 评论 -
Linux目录操作
Linux中的文件和window中的文件的概念不一样。window的目录类似一个容器,而Linux的目录更像一组由文件名和索引号组成的索引表目录相关APIopendir, fdopendir - open a directory //打开目录获得目录指针 //头文件#include <sys/types.h>#include <dirent.h> DIR *opendir(const char *name);//name —— 目录名DIR *fdo.原创 2020-05-25 21:54:20 · 315 阅读 · 10 评论 -
Linux系统编程——进程
进程的概念存储在存储器中的程序文件不是进程,只有当程序加载到内存中运行才能成为进程。进程是动态活动的实体。每个进程都有自己的虚拟内存空间。一个进程虚拟地址空间分布:进程通过进程控制块**(PCB——Process Control Block)**管理,进程从生老到病死的一切信息进程控制块都有记录进程是系统资源分配的基本单位。进程标识 同人有唯一的身份证号一样,进程也有ID...原创 2020-05-05 00:38:54 · 193 阅读 · 0 评论 -
linux文件操作——系统调用
linux操作系统奉行一切皆文件的理念,所有文件设备几乎都可以用一套系统调用即open()/close()/write()/read()等来操作。系统调用和C库调用操作文件类似。Linux自带的man手册是最权威的。通过查看man手册来查看系统调用用法。man手册一般用法:man <函数名>查看常用函数用法open()man 2 openman手册列出了sysc...原创 2020-05-05 00:39:46 · 437 阅读 · 0 评论 -
Linux文件操作学习之C标准库
快速索引废话说在前面查看相关API如何使用1、fopen函数2、fwrite函数3、fread函数4、fclose函数5、fflush函数6、fseek函数使用相关函数读写文件废话说在前面在Linux中,有两种方式可操作文件,一种是C标准库的文件操作API来操作,另一种则是Linux的系统调用API。C标准库的文件相关API是带f开头的,如fopen、fwrite、fread等;Linux的系...原创 2019-12-02 23:57:13 · 876 阅读 · 0 评论