自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 收藏
  • 关注

原创 linux网络编程:select()函数

简单解释:在网络编程中,函数connect(),accept(),read(),recv(),或recvfrom()这样的程序会阻塞(进程或线程执行到这些函数时候必须要等待某件事情的发生,如果没有发生,进程或线程就被阻塞,这些函数就不能立即返回),在使用select()函数就可以不阻塞(进程或线程执行select()函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不同来反映函数的执行情况。如果事件发生则与阻塞方式相同,如果事件没有发生则返回一个代码来告知事件未发生,而进程或线程继续执行)。se

2021-07-09 22:02:27 317

原创 struct sched_param结构体的运用以及线程属性简单记录

一、struct sched_param结构体#include <sched.h>#define sched_ss_low_priority __ss_un.__ss.__ss_low_priority#define sched_ss_max_repl __ss_un.__ss.__ss_max_repl#define sched_ss_repl_period __ss_un.__ss.__ss_repl_period#define sched_ss_init_b

2021-06-30 01:03:17 3098 2

原创 判断计算机处理器的大小端

方式一(通过指针地址)#include<stdio.h>//int占四个字节,char占一个字节int i=1; //存放,存放在低地址(小端),存放在高地址(大端)char *p=(char *)&i; //截断,存i的一个字节的低地址,然后判断低地址的内容if(*p == 1) printf("小端模式"); else // (*p == 0) printf("大端模式");方式一(通过指针地址)//Short占两个字节,char占

2021-05-04 18:34:33 370

原创 C语言:实现字符串反转函数(不使用库函数,只开辟空间)

#include<stdio.h>#include<stdlib.h>#include<string.h>void strReverse(char *inStr,char *outStr){ while(*inStr) { inStr++; } --inStr; while(*inStr){ *outStr = *inS

2021-04-16 16:38:23 546

原创 C语言:链表的运用(二)

目录动态创建链表前插法动态创建链表尾插法动态创建链表前插法#include<stdio.h>#include<stdlib.h>struct Test{ int data; struct Test *next;};void printLink(struct Test *head){ struct Test *p = head; while(p != NULL) {

2021-04-09 15:30:25 90

原创 linux 线程生产者和消费者(C语言)示例笔记

#include<stdio.h>#include<pthread.h>pthread_mutex_t mutex; //一个锁pthread_cond_t condc,condp; //两个条件变量int buffer = 0;void* consumer() //消费者{ int i; for(i = 1; i<=20 ; i++) { pthrea

2021-04-08 23:29:19 164

原创 C语言:链表运用(一)

链表运用(一)(1)链表的输出(2)链表的个数、查找(3)链表的后插、前插(4)链表的删除(1)链表的输出(2)链表的个数、查找(3)链表的后插、前插(4)链表的删除(1)链表的输出#include<stdio.h>struct Test{ int data; struct Test *next;};void printLink(struct Test *head){ struct Test *p = head;

2021-03-31 01:00:06 118

原创 C语言:实现strchr函数,实现strstr函数

实现strchr函数#include<stdio.h>void myputs(char *p){ while(*p != '\0') { printf("%c",*p++); } putchar('\n');}char *myStrchr(char *str,char c){ while(*str != '\0') { i

2021-03-31 00:02:52 500

原创 C语言:实现strcat函数,strcmp函数

实现strcat函数#include<stdio.h>void myputs(char *p){ while(*p != '\0') { printf("%c",*p++); } putchar('\n');}void myStrcat(char *dest,char *src){ while(*dest != '\0') {

2021-03-30 00:08:48 288

原创 C语言:实现strcpy函数,strncpy函数

#include<stdio.h>void myputs(char *p){ while(*p != '\0') { printf("%c",*p++); } putchar('\n');}void myStrcpy(char *dest,char *src){ if(dest == NULL || src == NULL) {

2021-03-30 00:00:08 149

原创 C语言:实现strlen函数 ,memset函数

实现strlen函数#include<stdio.h>int mystrlen(char *str){ int cnt = 0; while(*str++ != '\0') { cnt++; } return cnt;}int main(){ char *p = "landlsad ad "; int len = mystrlen(p);

2021-03-29 23:55:12 180

原创 C语言:实现puts函数,gets函数

实现puts函数#include<stdio.h>void myputs(char *p){ while(*p != '\0') { printf("%c",*p++); } putchar('\n');}int main(){ char *p = "landlsad ad "; myputs(p); return 0;}实现get

2021-03-29 23:49:34 1411

原创 学习Makefile规则与示例一

程序的编译过程4个步骤:预处理,编译,汇编,链接.预处理: 检测语法错误,把头文件包含进来,宏展开.编译:把. c文件转换成汇编文件.s汇编:把. s文件转换成二进制文件.o链接:. .o文件+库文件 =可执行程序gcc -v -o hello hello.c 就可观看到编译的细节.gcc -c -o a.o a.c //-c 把预处理,编译,汇编 做完 链接不做.1.Makefile的作用:高效地编译程序,在修改源文件或者头文件,只需要重新编译牵涉到的文件,就可以

2021-03-08 16:31:49 146

原创 linux的简单系统命令

1)data功能:显示日期和时间2)cal功能:显示日历3)users功能:显示当前登录系统的所以用户名字4)who功能:显示已登录到系统的用户的详细信息5)whomi功能:显示当前有效的用户名6)uname -a功能:打印系统信息7)free -h功能:显示内存使用情况8)ps -aux功能:显示当前进程信息快照(通常配合grep使用)各项含义9)top功能:动态的显示系统进程信息各项含义10)kill功能:发送信号给进程11)reboot功能:

2021-03-02 23:21:02 84

原创 Makefile的运用与示例二

通用Makefile的使用说明通用的Makefile,它可以用来编译应用程序:(1)支持多个目录,多层目录,多个文件;(2)支持给所给文件设置编译选项;(3)支持给某个目录设置编译选项;(4)支持给某个文件单独设置编译选项;(5)简单、好用。本程序的Makefile分为3类:1.顶层目录的Makefile2.顶层目录的Makefile.build3.各级子目录的Makefile一、各级子目录的Makefile:它最简单的形式如下:EXTRA_CFLAGS :=CFLAG

2021-02-06 15:25:21 146

原创 通信协议UART, I2C和SPI

1.什么是通信协议白话点说,通信协议就是通信时候双方约定的规则。打个类比,就像你跟另外一个人交流,你们之间需要一种交流的约定,就是语言。要么都说中文,要么都说英文。通信协议就类似于硬件之间交流的语言。2.串行通信和并行通信串行就是数据一个接一个的发送;并行就是所有数据都同时发出。UART, I2C和SPI三种通信协议都属于串口通信。3.串行数据的传输方向单工:是指数据传输仅能沿一个方向,不能实现反向传输。半双工:是指数据传输可以沿两个方向,但不能同时进行传输。全双工:是指数据可以同时进

2021-02-02 17:42:23 464

原创 树莓派采用翔云实现人脸识别

1.通过翔云平台购买人脸识别接口个人中心服务列表查看剩余接口次数2.C语言程序访问接口需要安装支持ssl的curl库,交叉编译curl库(1)C语言程序访问接口#include <stdio.h>#include <curl/curl.h>#include <string.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#includ

2021-02-02 11:50:14 429

原创 树莓派mjpg-streamer实现实时监控(局域网)

1.安装必要的工具sudo apt-get install libjpeg8-dev #JPEG支持库sudo apt-get install imagemagicksudo apt-get install libv4l-dev #4l是小写"L"sudo apt-get install cmake #下载编译工具2.下载mjpg-streamersudo apt-get install gitgit clone https://github.com/jacksonliam/m

2021-02-02 11:20:33 352

原创 交叉编译树莓派的curl库支持ssl

1.开发环境(1)装有openssl的ubuntu(2)交叉编译工具arm-linux-gnueabihf-gcc(3)openssl和libcurl源码交叉编译工具的安装 https://blog.csdn.net/qq_46777053/article/details/110221159libcurl源码的获取 https://github.com/curl/curl/releases/tag/curl-7_71_1openssl源码的获取 终端输入wget --no-check-

2021-01-28 10:50:32 619 2

原创 linux消息队列,共享内存,信号量综合运用

关于对消息队列,共享内存,信号量的具体介绍https://blog.csdn.net/qq_46777053/article/details/108804717mySemSercer.c#include<stdio.h>#include <sys/ipc.h>#include <sys/msg.h>#include <sys/types.h>#include <sys/shm.h>#include<stdlib.h>#

2021-01-26 13:28:17 109

原创 树莓派博通BCM2835芯片的IO口驱动代码调试和测试

树莓派有GPIO有41个寄存器,都是用来管理GPIO的。每个寄存器都是32位。树莓派有54个引脚,即I/O口,分别有6个寄存器来管理功能,GPFEL0 管理0~9引脚的输入/输出的功能 ------ GPFEL1管理 10~19引脚的输入/输出的功能 以此类推1.树莓派寄存器的介绍2.对引脚4进行配置对引脚4的寄存器(即GPFSEL0寄存器)进行配置GPFSEL0 GPIO Function Select 0: 功能选择 输入/输出根据红框框可知,要将引脚4 配置为输出引脚,需要

2021-01-25 20:48:22 814

原创 linux常用命令

常用命令ifconfig -a或ifconfig查看ipcd /home/用户名/Deskto切换到桌面文件/文件夹管理ls 列出当前目录文件(不包括隐含文件)ls -a 列出当前目录文件(包括隐含文件)ls -l 列出当前目录下文件的详细信息cd ./ 回当前目录的上一级目录cd - 回上一次所在的目录cd ~ 或 cd / 回当前用户的宿主目录mkdir 目录名 创建一个目录tuoch 文本名 创建一个文本rmdir 空目录名 删除一个空目录rm 文件名 文件名 删除一个文件或

2021-01-25 12:00:04 80

原创 总线地址,物理地址以及虚拟地址

总线地址(百度百科)地址总线(Address Bus : 又称:位址总线)属于一种电脑总线(一部份),是由CPU或有DMA能力的单元,用来沟通这些单元想要存取(读取/写入)电脑内存元件/地方的实体位址。个人理解:CPU能够访问内存的范围现象:装了32位的win7系统,明明内存条8G,可是系统只识别了3.8G,0.2G另作他用,装了62位,才能识别到8G32位能表示/访问 2^32 bit= 4,294,967,296 bit = 4,194,304 kbit = 4,096 mbit = 4 gb

2021-01-25 11:55:20 569

原创 树莓派驱动的简单框架编译和测试

1.驱动触发流程:open read write 软中断触发异常进入sys_call -> (系统调用)sys_call ->(vfs) sys_open,sys_read,sys_write ->驱动里面的open,read,write->硬件2.Linux内核驱动基础框架#include <linux/fs.h> //file_operation声明#include <linux/module.h> //module_init module

2021-01-23 21:58:34 377 1

原创 Linux内核结构

VFS 在系统调用接口中Linux shellshell 是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行,是个命令解释器。

2021-01-22 14:43:19 57

原创 关于对vfs的简单理解

1.什么是虚拟文件系统Virtual File System ?vfs就是对各种文件系统的一个抽象,它为各种文件系统提供了一个通用的接口,任何要使用文件系统的程序都必须经由这层接口来使用它。2.虚拟文件系统有什么作用?简化应用程序员的开发,不管是什么文件类型,不管文件是磁盘还是设备,都只用open read write统一操作。...

2021-01-22 13:59:10 1743

原创 Linux文件系统的目录及认知

1.什么是文件系统?常规认知: 根目录文件系统是操作系统用于明确存储设备组织文件的方法。以上说的方法:就是文件管理系统(程序),简称文件系统。2.文件系统的种类有哪些?FAT VFAT NTFS EXT1/2/3/4 HFS …树莓派查看文件系统的命令: df -Tvfat : boot(bootloader, kernel)ext4 : 根目录tmpfs : 内存文件系统3.什么是分区?windows: 目录即分区C盘(装系统的位置)也可以随意在C盘存放文件. D盘(

2021-01-22 11:58:31 98

原创 树莓派4.14内核替换

原文来自青木大哥https://blog.csdn.net/weixin_45309916/article/details/107525503为什么要进行树莓派的源码配置呢?是为了驱动代码的编写,驱动代码的编译需要一个提前编译好的内核,编译内核就必须配置,配置的最终目标会生成 .config文件,该文件指导Makefile去把有用东西组织成内核1.获取树莓派源码,安装好交叉编译工具源码及工具: https://github.com/raspberrypi/交叉编译工具的具体安装https://b

2021-01-21 22:15:20 855

原创 Linux内核源代码目录树结构

可运用一个小工具tree查看linux内核源码目录树安装sudo apt-get install tree在根目录下执行tree即可查看Linux内核源代码每个文件的作用arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录。和32位PC相关的代码存放在i386目录下,其中比较重要的包括kernel(内核核心部分)、mm(内存管理)、math-emu(浮点单元仿真)、lib(硬件相关工具函数)、boot(引导程序)、pci(PCI总线)和power(CPU相关状态)。block:部分

2021-01-21 19:16:29 197

原创 socket,TCP,http三者之间的关系学习笔记

1.http协议的介绍HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。(1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。(2)在HTTP 1.1中则可以在一次连接中处理多

2021-01-14 15:55:51 202

原创 TCP/IP协议与TCP协议的学习笔记

TCP/IP协议是用于计算机通信的一组协议,我们通常称它为TCP/IP协议族。它是70年代中期美国国防部为其ARPANET广域网开发的网络体系结构和协议标准,以它为基础组建的INTERNET是目前国际上规模最大的计算机网络,正因为INTERNET的广泛使用,使得TCP/IP成了事实上的标准。两者的区别:TCP/IP协议看上去好像是TCP协议和IP协议,但其实并不一样TCP/IP协议叫做网络通信协议,它包括上百个协议,而HTTP协议、TCP协议、IP协议只是TCP/IP协议中的一部分.下面的图表试图显

2021-01-14 14:29:14 756

原创 关于向线程的运行函数传递一个参数和多个参数

1.线程创建#include <pthread.h>int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);// 返回:若成功返回0,否则返回错误编号参数说明:第一个参数为指向线程标识符的指针。  第二个参数用来设置线程属性。  第三个参数是线程运行函数的起始地址。  最后一个

2020-12-17 16:05:30 2674

原创 关于交叉编译的概述

一、交叉编译的简介交叉编译是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。例如:在ubuntu linux 上编写树莓派的代码,并编译成可执行代码,在树莓派上运行,而不是在unbuntu linux 上运行。要分清楚编译与交叉编译的区别,编译是在一个平台上生成在该平台上的可执行代码。宿主机(host):编辑和编译程序的平台,一般是基于X86的PC机。目标机(target):用户开发的系统,通常都是非X86平台。hos

2020-11-27 11:33:55 494

原创 Linux库的介绍

1.介绍使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级。程序函数库可分为3种类型:静态函数库(static libraries)、共享函数库(shared libraries)、动态加载函数库(dynamically loaded libraries):(1)静态函数库,是在程序执行前就加入到目标程序中去了

2020-11-25 23:40:28 159

原创 如何登录树莓派

1.树莓派的串口登录1.1设备破解默认情况下,树莓派的串口和蓝牙连接。通过修改系统配置来断开蓝牙连接,把串口用来数据通信。修改系统配置:(1)打开SD卡根目录的“config.txt”文件,将下面的内容添加到末尾并保存。dtoverlay=pi3-miniuart-bt作用是断开串口和蓝牙的连接,解除对串口的占用。(2)修改根目录的“cmdline.txt”,将里面的内容全部替换成以下内容,以防万一,请先备份好这个文件的原内容。dwc_otg.lpm_enable=0 console=tt

2020-11-24 12:41:50 295

原创 Linux网络编程相关操作

一、Linux网络编程基础知识TCP/UDP对比1.TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接2.TCP提供可靠的服务。通过TCP连接传送的数据,无差错,不丢失,不重复,且按序达;UDP尽最大努力交付,即不保证可靠交付3.TCP面向字节流,实际上是TCP把数据看成一串无结构的字节流;UDP是面向报文的UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)4.每一条TCP连接只能是点到点的;UDP

2020-10-11 11:18:18 222

原创 Linux线程相关操作

Linux线程的简单介绍进程是程序执行时的一哥实例,是担当分配系统资源(CPU时间、内存等)的基本单位。在面向线程设计的系统中,进程本身不是基本运行单位,而是线程的容器。程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。  进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换

2020-10-09 12:28:30 182

原创 Linux IPC

进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。以Linux中的C语言编程为例。一、管道管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。1、特点:它是半双工的(即数据只能在一个方向上流动),具有固定读端和写端。它只能用于具有亲缘关系的进程之间的通信(

2020-09-29 20:33:45 244

原创 system函数和popen函数

Linux的system函数的实现源码system()会调用fork()产生子进程,由子进程来调用/bin/sh-c cmdstring来执行参数cmdstring字符串所代表的命令,此命令执行完后随即返回原调用的进程。int system(const char * cmdstring){ pid_t pid; int status; if(cmdstring == NULL){ return (1); } if((

2020-09-23 22:15:25 317

原创 exec配合fork使用

实现功能,当父进程检测到输入为1的时候,创建子进程把配置文件的字段值修改调。config.txt的内容SOEED=3LENG=9SCORE=9LEVEL=5没有运用exec族函数#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<stdio.h>#include<unistd.h>#include<string.h>#inclu

2020-09-22 17:18:23 157

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除