Linux应用层
进程,线程,网络编程
雲烟
可以卑微如尘土,不可扭曲如蛆虫。
展开
-
Linux设备io方式控制IO
头文件包含:#include "gpioset.h"#include <stdio.h>#include <fcntl.h>#include <unistd.h>#include <string.h>#include <poll.h>#include <stdlib.h>#include <errno.h>#include <signal.h>#include <sys/epoll.原创 2021-03-11 13:38:47 · 400 阅读 · 1 评论 -
linux应用层使用i2c
背景:linux应用层访问i2c出错,原因分析,i2c结构体数据错误,没有给i2c结构体分配内存,设备器件地址不对。首先确定设备挂接在哪一条总线上,通过i2c-tool。i2cdetect -l或者i2cdetect -y -r 3i2c写函数:unsigned char base_i2c_write(unsigned char device_addr, unsigned char *buff, int ByteNo){ int fd, ret; const原创 2020-07-15 17:56:31 · 2338 阅读 · 0 评论 -
信号量示例
本质上就是共享资源的数目,用来控制对共享资源的访问。 用于进程间的互斥和同步。 每种共享资源对应一个信号量,为了便于大量共享资源的操作引入了信号量集,可对所有信号量一次性操作。对信号量集中所有操作可以要求全部成功,也可以部分成功。 二元信号量的值为0和1。 对信号量做PV操作。 in...原创 2018-09-12 22:37:44 · 868 阅读 · 0 评论 -
协同进程
目标:创建两个进程进行通信,简单使用父进程fork子进程的方式。方式:使用两个管道实现双工通信。步骤:父进程写入管道A中数据,子进程读取后调用add函数进行相加,将结果写入管道B中,父进程从管道B中读取相加结果值。/************************************************************************* > Fi...原创 2018-09-27 22:46:04 · 698 阅读 · 0 评论 -
无名管道使用
有名管道使用范围仅限父子进程之间或者兄弟进程,特别注意的是,父进程fork()出子进程,同样继承了之前父进程创建的管道描述符fd,鉴于单工通信,必须关闭其中一个方可通信,也就是父写子读,或者子写父读。#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h&g...原创 2018-09-07 17:41:16 · 249 阅读 · 0 评论 -
无名管道实现cat | grep
shell命令的本质是一个个封装好的c函数,同样由基本系统调用编写。相当于shell行输入:cat /etc/passwd | grep root,需要任何过滤功能,只需要将传入字符串改变即可。/************************************************************************* > File Name: cmd...原创 2018-09-08 16:18:13 · 505 阅读 · 0 评论 -
协同进程示例
两个进程通过两个管道进行双向通信。 父子进程之间创建两个管道-> 父进程写入两个数-> 子进程读取完成相加-> ...原创 2018-09-08 17:29:58 · 210 阅读 · 0 评论 -
不完整管道
读取一个写段已经关闭的管道。所有数据被读取后,read返回0,表示达到了文件尾部。/************************************************************************* > File Name: broken_pipe.c > Author: CC > Mail: 6828620@16...原创 2018-09-08 18:44:28 · 211 阅读 · 0 评论 -
标准库中的管道
FILE* popen(const char *cmdstring,const char * type);cmdstring:传入的命令字符串。type:传入的读写方式,“r”,"w"。返回值:成功返回文件指针,出错返回NULL。int pclose(FILE *fp)返回值:cmdstring的终止状态,出错返回-1。pclose必须与popen配合使用,类似fop...原创 2018-09-08 22:23:34 · 151 阅读 · 0 评论 -
有名管道FIFO示例
shell中本身存在mkfifo的命令,但是本质也是调用mkfifo()函数实现。与无名管道相比,无非是多了一个管道文件用以操作。先在shell中通过mkfifo创建一个管道文件mkfifo s.pipe,执行read s.pipe和write s.pipe。读端:/*********************************************************...原创 2018-09-08 23:30:15 · 281 阅读 · 0 评论 -
消息队列示例
消息队列是内核中的一个链表。使用方法类似有名管道。消息队列使用完毕后,不释放永久存在内核中,除非重启。发送消息:/************************************************************************* > File Name: msg_snd.c > Author: CC > Mai...原创 2018-09-09 12:57:19 · 1019 阅读 · 0 评论 -
共享内存示例
a.共享内存区域是被多个进程共享的一部分物理内存。 b.多个进程都可把该共享内存映射到自己的虚拟内存空间。所有用户空间的进程若要操作共享内存,都要将其映射到自己的虚拟空间中,通过映射的虚拟空间地址去操作共享内存,从而达到进程间的数据通信。 c.共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内...原创 2018-09-09 14:17:53 · 526 阅读 · 0 评论