- 博客(33)
- 收藏
- 关注
原创 Ubuntu Nginx+Rtmp服务器搭建
参考博文:他人博文首先感谢博主的分享。我用的是ubnutu16.04.在我搭的时候会碰到几个问题。1。下载安装 nginx 和nginx-rtmp 编译依赖工具的时候会出现lib3的依赖库没有源。要更新: 1. apt-get update2. apt-get upgrade更新完就可以安装他的依赖库了。2。下载nginx-rtmp安装包的时候会连不上github 这个就要百度去搜怎么往horst里加github的地址了。百度一推。实在不行就window外面下完了在拖进ubuntu。
2021-03-25 21:11:05 229
原创 libcurl库安装心得
一、libcurl简介libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。libcurl的官网 http://curl.haxx.se/库下载https://github.com/curl/curl/releases/tag/curl-7_71_1
2021-02-20 15:51:24 390
原创 树莓派-mjpg-streamer摄像头
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、mjpg-streamer解读二、使用步骤1.从github上 下载 MJPG-streamer,并编译, 安装2.下载后安装步骤总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、mjpg-streamer解读示例:mjpg-streamer
2021-02-15 13:22:31 764
原创 常用字符串函数实现
常用字符函数实现: 1.puts函数: 字符串输出函数 #include <stdio.h> #include <stdlib.h> void myputs(char *pDate) { while(*pDate!=NULL){ putchar(*pDate++); //printf("%c",*pDate++); } printf("\n"); } int main() { ch
2020-11-08 10:25:45 215
原创 如何写简单脚本
打开用.sh后缀。例如:vi.text.shint ifor(i=0;i<5;i++){ ./demo2}~ 编译用:chmod +x text.sh`
2020-10-23 20:39:55 3675
原创 树莓派超声波模块详解
1.超声波模块介绍超声波模块测距原理:1.超声波模块和单片机进行连接。2.触发信号,给Trig引脚发送一个大于10us的高电平。3.发送高电平后,模块会循环发送8个40KHZ的脉冲,与此同时Echo引脚会由低电平变成高电平,这时候就需要开启定时器开始计算Echo引脚的高电平时间,4.模块接收到返回的超声波时,Echo电平会由高电平变成低电平,此时应该关闭定时器,这个时候的算出来的定时器的时间就是Echo持续的高电平,也就是超声波从发射到传回来的总时间。5.(除去温度的影响)根据声速为340m
2020-10-23 20:39:43 1924
原创 树莓派外设开发综述
树莓派外设开发接口文档参考博文:https://www.cnblogs.com/lulipro/p/5992172.html1.树莓派的接口:如何查看树莓派的IO口命令:gpio readallIO口:Input (输入) output(输出) 对主控芯片来说Input:人体、烟雾、火焰、震动传感器等output:继电器、蜂鸣器 等增强型IO口 PWM :用在电机调速,灯光调明亮度。串口: uartIICSPIIIS其他 特地硬件的接口:flash等树莓派wiringPi库:w
2020-10-23 20:39:32 316
原创 交叉编译
交叉编译概念:交叉编译是在一个平台上生成另一个平台上的可执行代码。例如:我们在ubnutu上写树莓派代码,并编译成可执行文件,如a.out,是在树莓派上运行,并不是在ubnutu上运行。编译概念:在一个平台上生成在该平台上可执行代码。为什么要交叉编译:平台上不允许或不能够安装我们所需要的编译器比如C51。1.因为目的平台上的资源贫乏,无法运行我们所需要编译器。2.树莓派是不是就不需要交叉编译?要。树莓派有时有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。操作系统也
2020-10-23 20:39:22 1352
原创 树莓派LINUX内核移植
参考博文:https://editor.csdn.net/md?not_checkout=1&articleId=109006969树莓派linux内核下载地址:https://github.com/raspberryPi/需要下载内核的版本可以在树莓派用uname -r查看 然后去下载对应的内核版本。1.在linux中创个文件夹放下载好的内核版本,并解压。2.cd进去内核文件夹。3.配置config第一种方式:cp 厂家.config .config第二种方式:make m
2020-10-23 20:39:08 1959
原创 Linux字符设备驱动-树莓派IO口驱动框架
驱动俩大利器 :1.电路图:作用:通过电路图找到寄存器2.芯片手册芯片手册第六章:GPFSEL0 :寄存器配置:(input/output) GPIO Function Select 0 功能选择: 输出/输入 (GPIO Function Select Registers )32位14-12 001 = GPIO Pin4 is an output000 = GPIO Pin4 is an input引脚(置1和置0) 1高电平 0低电平GPSET0 GPIO Pin Output Set
2020-10-23 20:38:50 250
原创 LINUX库概念及制作
概念:参考博文链接:https://www.cnblogs.com/sunsky303/p/7731911.htmlhttps://blog.csdn.net/wk_bjut_edu_cn/article/details/81735956静态库:静态函数库:程序执行前(编译时)就加载到目标程序中去。优点:1.静态库打包到程序中加载速度快2.发布程序无需提供静态库,已经在APP中,移植方便缺点:1.程序太大2.链接时完整的拷贝到可执行文件,被多次使用就有多次冗余拷贝。3.更细、部署、
2020-09-27 13:09:05 122
原创 FTP网盘小demo
服务端:#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<stdlib.h>//#include<linux/in.h>#include <arpa/inet.h>#include <netinet/in.h>#include<string.h>#include <unistd.h>#inclu
2020-09-24 01:21:22 233 1
原创 linux线程(面试会考)
Linux线程介绍进程与线程:典型的UNIX/Linux进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程各自处理独立的任务。进程是程序执行时的一个实例,是担当分配系统资源(CPU时间、内存等)的基本单位。在面向线程设计的系统中,进程本身不是基本运行单位,而是线程的容器。程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。线程是操作系统能够进行运算调度的最小单位。它被包含在
2020-09-11 18:22:36 302
原创 线程:生产者与消费者问题
#include<stdio.h>#include<pthread.h>#include<stdlib.h>pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; //初始化锁pthread_cond_t condp=PTHREAD_COND_INITIALIZER; //初始化生产者条件变量pthread_cond_t condc=PTHREAD_COND_INITIALIZER; //初始化消费者条件变量int
2020-09-11 13:11:08 116
原创 调试技巧
1:创建测试文件:vi text.c2:测试文件代码:#include<stdio.h>int main(int argc, char **argv) //传入要运行次数的值{ int temp=atoi(argv[1]); //要运行的次数 int i; for(i=0;i<time;i++){ system("./demo3"); }}3.给要测试文件命名demo3gcc
2020-09-03 18:02:28 123
原创 进程间通信(管道、命名管道、消息队列、共享内存、信号、信号量)
进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。(笔面会问。背)一、管道(无名管道pipe)管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。1、特点:(1)它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。(2)它只能用于具有亲缘关系的
2020-08-30 12:02:09 840
原创 链表的增删该查
链表的插入又分头部插入和尾部插入。先说尾部插入:思路如下:假如一个链表有5个数据,要在3后面插入一个100,先找到3这个节点,再把新节点的下一个节点指向3的下一个节点,再把3的下一个节点指向新节点就完成了插入。注意(2,3步骤不能调换,不然4就丢掉了)。代码如下:#include<stdio.h>typedef struct date{ int date; struct date *next;}stu,*pstu;void printLink(s
2020-08-21 20:16:13 155
原创 typedef函数
typedef作用:为一种数据类型定义一个新名字。1.和普通类型匹配,通过名字来获取一些信息。一般配寄存器中会用到。例如:typedef unsigned char u_int8; //(0,255) 8位寄存器typedef unsigned short int u_int16; // 16位寄存器typedef unsigned int u_int32; // 32位寄存器//通过typedef 把类型直接命名为u_int8等。代码比较友好。比较直观和方便省事2.和struc
2020-08-19 15:45:50 448
原创 结构体的应用
1.如何定义一个结构体:#include<stdio.h>struct student{ int chengji; char name[128];};int main(){ struct student stu={98,"yl"}; printf("%s:%d\n",stu.name,stu.chengji); return 0;}结果:yl:982.结构体指针。结构图指针要注意用-》 还
2020-08-13 15:15:47 294
原创 exec族函数、system、popen
exec族函数函数的作用:我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序。当进程调用exec函数时,该进程被完全替换为新程序。因为调用exec函数并不创建新进程,所以前后进程的ID并没有改变。功能: 在调用进程内部执行一个可执行文件。可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件。函数族: exec函数族分别是:execl, execlp, execle, execv, execvp, execvpe 函数原型:1 int ex
2020-08-04 16:16:09 294
原创 常用字符串API实现(笔试会考)
1.puts //输出编程思路:因为字符串有‘\0’结尾这一特点。就可以去用putchar(也可以用printf)一个一个输出字符并且判断字符串是否到达尾巴。注意(用指针的话要注意指针的偏移)#include <stdio.h>#include <stdlib.h>void myputs(char *p){ while(*p!='\0'){ putchar(*p); p++; } putchar('\n');}int main(){
2020-07-31 09:18:37 189
原创 linux进程fork、wait等
1进程的概念:程序是静态的,类似于电脑桌面上的可执行文件。进程是动态的,类似于程序运行起来就是进程。2.如果查看系统中的进程:用PS指令:ps -aux(aux是乌邦图系统,查看乌邦图系统下的进程)如果查看想要的进程。用管道配合grep去过滤: ps -aux| grep init(查找有关init的进程)3.top指令(类似于windows任务管理器)查看进程CPU的占用率等等。4.什么是进程标识符?每一个进程都有一个非负整数表示唯一的IP,叫做pid 类似于进程的身份证。pid=0
2020-07-31 09:18:01 280
原创 孤儿进程(面试)
什么是孤儿进程?父进程如果不等待子进程退出,在子进程之前就结束了自己的”生命“,此时子进程叫做孤儿进程。Linux避免系统中存在过多孤儿进程,init进程收留孤儿进程,变成孤儿进程新的父进程。init进程的pid号为1。例子:#include<stdio.h>#include <sys/types.h>#include <unistd.h>#include<stdlib.h>#include <sys/wait.h>int ma
2020-07-30 19:17:38 103
原创 字符串概念和常用API
1.字符串的定义方式有以下4种,一般用指针最为合适。#include <stdio.h>#include <stdlib.h>int main(){ int i; char str[5]={'a','b','c','d','e'}; //第一种 for(i=0;i<sizeof(str)/sizeof(str[0]);i++){ printf("%c",str[i]); } putchar('\n'); printf("===========
2020-07-29 13:32:57 233
原创 C语言的存储空间是如何分配的(面试可能会考)
C语言的存储空间是如何分配的(面试可能会考):存储空间由低到高:见图红色箭头所指的流程控制、算法,叫做正文(代码段)。紫色箭头所指的初始化过的数据叫做初始化的数据(数据段),黄色箭头所指的未初始化的数据叫做未初始化的数据(bss段)。malloc出来的就存放在堆空间里。栈:比如有个函数,然后再main()函数里调用fun();void fun (){int x=10; } 调用fun()函数的地址保存在栈里,fun()函数里的局部变量int x=10;也保存在栈里。就是一般函数调用的地址
2020-07-28 15:06:18 486
原创 fopen、fread、fwrite等的使用
1 fopen函数原型: FILE *fopen(const char *path, const char *mode);返回值:返回值是一个FILE类型的文件流,例如FILE *fd;参数:const char *path 文件的路径const char *mode 打开模式: 权限mode权限如下:r 只读方式打开一个文本文件rb 只读方式打开一个二进制文件w 只写方式打开一个文本文件wb 只写方式打开一个二进制文件a 追加方式打开一个文本文件ab 追加方式
2020-07-23 22:32:42 316
原创 fopen与open的区别(比面可能考)
来源从来源的角度看,两者能很好的区分开,这也是两者最显而易见的区别:open是UNIX系统调用函数(包括LINUX等),返回的是文件描述符(File Descriptor),它是文件在文件描述符表里的索引。fopen是ANSIC标准中的C语言库函数,在不同的系统中应该调用不同的内核api。返回的是一个指向文件结构的指针。PS:从来源来看,两者是有千丝万缕的联系的,毕竟C语言的库函数还是需要调用系统API实现的。移植性这一点从上面的来源就可以推断出来,fopen是C标准函数,因此拥有良好的.
2020-07-23 09:24:44 417
原创 linux之简单修改配置文件
要求实现功能:配置文件date1.c里有:QWER=5ABCD=6ASDF=7要求编写一个小程序把配置文件date1里的ABCD=6改成ABCD=8编程思路:1 进行参数传参。 int main(int argc,char** argv)2 判断参数个数是否正确。3 用open函数打开date1的文件4 用read函数读取文件内容到buf5 修改buf里的内容。修改思路:(1.用strstr函数 char *strstr(const char *haystack, const
2020-07-22 22:16:10 1113 1
原创 面试:如何避免内存泄露
什么是内容泄露?现象:程序跑起来,短时间内程序没问题,时间一久突然奔溃。就应该想到很大原因是内容泄露。例子:while(1){ int *p=malloc(1024);//每隔5秒开辟1M空间。 sleep(5);}malloc申请的空间程序不会主动释放,在linux中程序结束后系统会主动回收这个空间。如何避免:1.注意循环中有没有一直申请空间。2.及时合理的释放空间。释放函数:free(p); 注意不要让p变成野指针 p=NULL;...
2020-07-22 15:54:31 111
原创 C语言指针简单易懂版无深入
1.什么是指针变量?例如int型变量存放的是整数、char存放的是字符。那存放地址的变量就是指针变量。也可以理解为指针就是地址。地址、地址、地址重要的事说三遍。int a; //整形变量char c; //字符变量int *p //指针变量 用来存放别人地址的变量。注意(*只在定义指针变量是作为标识符来使用,其他时候都是作为取地址里的内容来使用。)2.如何通过指针来访问变量?int a=5;char c=‘a’;printf(" %d \n",a); //通过变量名来访问
2020-07-22 15:41:31 154
原创 linux实现cp拷贝命令的思路和源码
1.思路:命令参数样式: cp src.c des.cargv[0] argv[1] argv[2](1).C语言参数。 int argc(参数个数)、 char** argv(2)编程思路:0.判断参数1.打开源文件src2.读取源src到buf3.打开目标des4将buf写入目标des5.关闭src、关闭des...
2020-07-21 16:09:42 517
原创 linux文件操作{open、write、read、close、creat}
open、write、read、close、creatopen()函数功能描述:用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数。所需头文件:#include <sys/types.h>,#include <sys/stat.h>,#include <fcntl.h>函数原型:int open(const char *pathname,int flags,int perms)参数:pathname:被打开的文件名(可包括路径名
2020-07-21 11:26:58 386
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人