Linux
文章平均质量分 70
linux文件,进程,进程间通信,线程,socket网络编程
Linux劝退师
这个作者很懒,什么都没留下…
展开
-
树莓派I/O口驱动实现
实现目标:上层输入0/1来驱动底层I/O口输出低/高电平(实现不调用wiringpi库来操作I/O口)(下面拿树莓派的引脚4来举例)步骤:1.根据芯片手册和驱动框架来编写驱动代码2.上层应用制作3.修改Makefile4.交叉编译5.scp传文件到树莓派6.安装驱动,更改权限芯片手册:寄存器的地址问题我们在编写驱动程序的时候,IO空间的起始地址是0x3f000000,加上GPIO的偏移量0x2000000,所以GPIO的物理地址应该是从0x3f200000开始的,然后在这个基础上进行原创 2021-03-22 14:03:32 · 284 阅读 · 2 评论 -
树莓派Linux内核编译
首先我们来讲一下为什么要配置树莓派的linux内核因为要进行驱动代码的编写需要一个提前编译好的内核,编译内核就必须配置,配置的最终目标会生成 .config文件,该文件指导Makefile去把有用东西组织成内核。一般有这三种方法 第一种方式:cp 厂家.config .config第二种方式:make menuconfig 一项项配置,通常是基于厂家的config来配置第三种方式:完全自己来如何配置树莓派的Linux内核1.把树莓派的Linux内核源码,交叉编译工具拷贝到Linux虚拟机原创 2021-03-15 11:21:41 · 315 阅读 · 1 评论 -
Linux静态库与动态库的相关概念以及编程
一.分模块编程:当我们在实现一个项目的时候,比如wifi小车,我们会碰到超声波模块,电机模块,wifi模块等模块的开发,这时候,我们可以让不同的小组成员来完成不同的模块,作为项目负责人只需要调用他们的模块函数即可。所以分模块编程有以下优点:a.功能责任划分b.方便调试c.主程序简洁二.静态库与动态库1.介绍使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库原创 2021-02-07 14:06:22 · 154 阅读 · 0 评论 -
Linux--socket网络编程
一.什么是socket:1.socket起源于Unix,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)。2.Socke可以看成是两个网络应用程序进行通信时,各自通信连接中的端点,这是一个逻辑上的概念。它是网络环境中进程间通信的API(应用程序编程接口),也是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和一个原创 2021-02-05 17:06:00 · 198 阅读 · 1 评论 -
Linux—多线程编程
1.什么是线程: 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。线程包含了表示进程内执行环境必须的信息,其中包括进程中表示线程的线程ID、一组寄存器值、栈、调度优先级和策略、信号屏蔽字、errno常量以及线程私有数据。进程的所有信息对该进程的所有线程都是共享的,包括可执行的程序文本、程序的全局内存和堆内存、栈以及文件描述符。在Unix和类Unix操作系统中线程也被称为轻原创 2021-02-04 01:30:56 · 516 阅读 · 0 评论 -
Linux--进程间通信机制--信号量
1.什么是信号量:信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。信号量的值为正的时候,说明它空闲。所测试的线程可以锁定而使用它。若为0,说明它被占用,测试的线程要进入睡眠队列中,等待被唤醒。信号量是一种特殊的变量,访问具有原子性。只允许对它进行两个操作:1)等待信号量当信号量值为0时,程序等待;当信号量值大于0时,信号量减1,程序继续运行。2)发送信号量将信号量值加1。讲个比喻:比如有一个房间,门上有一把锁,这个房间同时只允许一个人进去,那么开锁的钥匙,原创 2021-02-02 21:31:19 · 172 阅读 · 0 评论 -
Linux进程间通信--信号
今天我们来讲一下进程间通信的方式之一:信号我们知道在Linux下要终止一个内涵while(1)的死循环程序时我们都会用到CTRL+C操作。当我们按下这个操作时,运行中的进程捕获到这个信号然后作出一定的操作并最终被终止。信号是UNIX和Linux系统响应某些条件而产生的一个事件,接收到该信号的进程会相应地采取一些行动。通常信号是由一个错误产生的。但它们还可以作为进程间通信或修改行为的一种方式,明确地由一个进程发送给另一个进程。一个信号的产生叫生成,接收到一个信号叫捕获。1.介绍Linux下的信号我们可原创 2021-02-02 18:31:34 · 238 阅读 · 0 评论 -
Linux进程间通信--共享内存(Shared memory)
今天我们来谈一谈Linux进程间通信的方式之一共享内存我们先来看看共享内存的定义:共享内存,顾名思义就是允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存连接到他们自己的地址空间中,所有的进程都可以访问共享内存中的地址。如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。怎么使用共享内存,有以下几点步骤:1.创建共享内存 shmget原创 2021-02-01 21:30:41 · 711 阅读 · 1 评论 -
Linux进程间通信--消息队列(Message queuing)
今天我们来谈一谈Linux进程间通信的方式之一消息队列我们先来看看关于消息队列的定义:1.消息队列是消息的链表,存放在内核中并由消息队列标识符表示。2.消息队列提供了一个从一个进程向另一个进程发送数据块的方法,每个数据块都可以被认为是有一个类型,接受者接受的数据块可以有不同的类型。但是同管道类似,它有一个不足就是每个消息的最大长度是有上限的(MSGMAX),每个消息队列的总的字节数(MSGMNB),系统上消息队列的总数上限(MSGMNI)。可以用cat /proc/sys/kernel/msgmax查原创 2021-01-31 18:39:34 · 622 阅读 · 0 评论 -
Linux进程间通信--管道(pipe)与命名管道(FIFO)及其阻塞状态
我们知道进程间通信方式有:管道,FIFO,消息队列,共享存储,信号量,套接字,STREAMS这几种,今天我们来谈一谈pipe和FIFO。首先我们先来看一下定义:管道pipe:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。命名管道FIFO:有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。我们先来看一下管道:一般管道有这样的应用场景,父进程给一个只写信号到管道,子进程进行读取,或者子写父读。在管道等待输入的过程我们原创 2021-01-30 14:46:01 · 1236 阅读 · 0 评论 -
Linux下实现在exec配合fork在一定条件下修改配置文件原理
***简述:***在exec程序的进程中创建子进程调用changeData程序来进行修改a.config这个配置文件中的SPEED。首先我们先来看看changeData的代码#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<stdio.h>#include<unistd.h>#include<string.h>#include<st原创 2021-01-29 16:04:08 · 146 阅读 · 0 评论 -
Linux下自己实现cp命令的程序
首先我们来讲一下思路,要拷贝一份文件我们需要以下几点操作:1.打开源文件2.把源文件读出来写到缓冲区(buf)3.打开/创建/重置 最终要的新文件4.将buf里面的东西写到新文件里面5.close两个文件(不要忘记!)我们知道Linux下cp命令一般是三个参数,首先是cp 然后是要复制的文件 在后面是目标文件。比如 cp file1 file2 就是把file1的内容拷贝给file2。那么我们要实现的程序也要有相同的功能,那么从命令操作界面把要操作的文件命传到程序里面去呢,我们用到了两个参数,原创 2021-01-27 12:03:08 · 672 阅读 · 2 评论 -
Linux下的文件读写操作
首先要包含以下头文件#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>//以上文件操作需要头文件#include<stdio.h>#include<string.h>//strlen#include<stdlib.h>//malloc对于文件读写我们用read和write函数,与c中create函数类似,具原创 2021-01-26 15:38:46 · 717 阅读 · 0 评论 -
Linux下操作文件为什么最后要close,以及操作文件简单原理阐述
Linux下操作文件为什么最后要close,以及操作文件简单原理阐述1、在Linux中要操作 一个文件,般是先open打开 一个文件, 得到文件描述符,然后对文件进行读写操作 (或其他操作),最后是close关闭文件即可。 2、强调- 一点:我们对文件进行操作时,一定要先打开文件, 打开成功之后才能操作,如果打开失败,就不用进行后边的操作了,最后读写完成后,一定要关闭文件,否则会造成文件损坏。3、文件平时是存放在块设备中的文件系统文件中的,我们把这种文件叫静态文件,当我们去open打开 一一个文件时,I原创 2021-01-26 14:24:50 · 2246 阅读 · 0 评论