- 博客(21)
- 收藏
- 关注
原创 C语言中常用操作
结构体相关①:取结构体中的结构体指针操作示例如下:typedef struct{ int a; char data[32];}DataInfo_t; //单个用户信息的结构体typedef struct{ int MaxDataNum; //最大用户数量 int DataNum; //实际用户数量 DataInfo_t* pData;}DataList_t; //所有的用户信息结构体取DataList_t结构体中的pData数据static DataList_t g_Dat
2022-05-25 10:00:24
163
原创 JSON之数组类
cJson两种解析数组的方法cJSON_GetArraySize(cJSON *);cJSON_GetArrayItem(cJSON *, int);解析数组类一:像以上格式的数据解析可以使用如下方式:cJSON *ip_arry = cJSON_GetObjectItem( clientlist, "iplist"); //clientlist 是使用 cjson对象if( NULL != ip_arry ){ cJSON *client_list = ip_arry->c
2022-05-05 16:20:52
1433
1
原创 SourceInsight4.0设置技巧
设置护眼色点击Options -> Preferences.点击Colors & Eonts点击Pick Color,如图设置设置高亮快捷键(Alt + Q)点击Options -> Key Assignments搜索View:Highlight Word(高亮文字)点击Delete Assignments删除原本的快捷方式。点击Assign New Ket…然后点击你想输入的快捷键【Alt + Q】.点击OK,设置成功设置我喜欢的编程方式(大括号自动缩进)
2022-04-24 20:47:55
859
原创 代码之回调函数的用法一
使用场景在回调某些数据(如:一个int型变量),还需要其他数据。可以在注册回调的时候把锁需要的数据封装为一个结构体,转为void *类型传输。注意:在哪个文件调用数据,就在那里定义函数指针。代码处理(伪代码)- 1、文件2的头文件typedef void (*CallbackProc)(int A, void *B); //函数指针typedef struct { CallbackProc pProc; void *UserData;}CallBack_t;void ProcAtt
2022-04-16 14:01:17
382
原创 Linux基础知识点
1.gcc编译流程分析① 预处理:去掉注释,加载头文件, 代替宏定义, 条件编译gcc -E hello.c -o hello.i② 编译:将源代码生成相应的汇编代码gcc -S hello.i -o hello.s③ 汇编:将汇编语言翻译成机器语言gcc -c hello.s -o hello.o④ 链接:将一个或多个目标文件外加库,链接为一个可执行文件gcc hello.o -o hell2.static的用法用static修饰局部变量:使其变为静态存储方式(静态数据区),
2022-04-14 10:20:27
697
原创 代码之字符串转cJSON
cJSON的使用json的数据结构//c中没有对象,所以json数据是采用链表存储的 typedef struct cJSON { struct cJSON *next,*prev; // 数组 对象数据中用到 struct cJSON *child; // 数组 和对象中指向子数组对象或值 int type; // 元素的类型,如是对象还是数组 char *valuestring; /
2022-03-31 20:30:13
1336
原创 常用算法之快速排序
对一组int型数组进行快速排序。int a[] = {6,4,7,1,9,8,5,2,3}思路:把数组的第一个数6设置为基准点从第二个数开始,逐个与基准数 6 进行比较,把比它小的数都放到前面,比它大的数都放到后面。函数嵌套。把基准数两边的数看做两个新的无序数组(看做两个数组,实际数组并未拆开),同样进行比较,这样一直嵌套最终数组排序完成。嵌套停止的条件是函数的第二、三个参数相等,即“拆分”的数组仅有一个数。代码:#include<stdio.h>#include<
2022-03-25 09:29:47
78
原创 Linux之编写shell脚本
什么是shell脚本首先它是一个脚本,并不能作为正式的编程语言。因为是跑在linux的shell中,所以叫shell脚本。说白了,shell脚本就是一些命令的集合。例如:创建、进入、删除目录,拷贝文件等操作。Shell脚本通常都是以.sh 为后缀名的shell脚本的基本结构以及如何执行最基本的shell脚本(Ubuntu14.04)①:脚本内容hello.sh#! /bin/sh #必需的:表示该文件使用的是bash语法,不加就无法执行echo "Hello World!"②:
2022-03-22 20:31:16
6025
原创 Linux之shell脚本实例
脚本功能解压编译器,并使编译器起作用。可以编译代码脚本内容(toolchain_install.sh)#!/bin/bashecho "--------------starting install toolchain--------------" #类似于printffilepath=$(cd "$(dirname "$0")"; pwd)#获取当前脚本所在绝对路径,赋给filepath变量tar zxvf $filepath/montavista.tgz -C /opt/#解压缩mon
2022-03-22 19:36:50
131
原创 网络协议之关于RTSP的一些问题
1.RTSP之TCP与UDP方式区别TCP与UDP方式的区别在客户端项服务端SETUP请求中的Transport项体现。TCP请求方式(RTSP over TCP)此方式比较灵活,它不用另外建立音视频传输的Socket,而直接使用RTSP的Socket,这样做可以节省不少资源开支。由于采用TCP传输,数据的可靠性得到保障。Transport项指定了TCP传输方式RTP/AVP/TCP。UDP请求方式(RTSP over UDP)此方式需要多建立两个Socket,用于RTCP、RTP数据传送。客
2022-03-16 15:11:08
5212
原创 网络协议之ONVIF搜索(Probe)
在onvif协议对接中,首先要明确服务器和客户端的身份服务器:通常是你要对接的其他厂家的数字摄像头(IPC)客户端:通常是对接的ipc的设备程序,安防业内多称(NVR),当然其他软件工具也可称为客户端,如ONVIF Device Test Tool, vlc软件设备搜索要访问一个IPC摄像头,或者说要调用IPC摄像头提供的Web服务接口,就要先知道其IP地址,这就是设备发现的过程,或者叫设备搜索的过程。ONVIF并未自己定义服务发现框架,而是复用了已经很成熟的WS-Discovery标准WS-Di
2022-03-16 14:05:10
6032
原创 网络协议之ONVIF
什么是ONVIFonvif,即Open Network Video Interface Forum(开放型网络视频接口论坛)。ONVIF协议的出现,解决了不同厂商之间开发的各类失败不能融合使用的难题,提供了统一的网络视频开发标准。ONVIF协议将终端设备(摄像头)提供Web Service服务,将每一个功能看做是一个Web Service。ONVIF的实现机制①:Web Service是基于网络的、分布式的模块化组件,执行特定的任务。②:Web Service主要利用HTTP和SOAP协议使数据在
2022-03-16 11:04:37
6752
原创 IO复用循环服务器例子1
#include <stdio.h>#include <string.h>#include <pthread.h>#include <time.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#define BUFFLEN (1024)#define SERVER_PORT (8899) //服务端端口#defi
2022-03-15 20:56:45
91
原创 代码查错方法之gdb生成core文件
core文件的生成和路径设置在程序崩溃时,内核会生成一个core文件,即程序最后崩溃时的内存映像,和程序调试信息。之后可以通过gdb,打开core文件察看程序崩溃时的堆栈信息,可以找出程序出错的代码所在文件和函数。①:core文件的生成开关和大小限制:1)使用 ulimit -a 命令,可以察看core文件的生成开关和大小限制所有信息(输出内容中 core file size,若为0表示不生成core文件) 2)使用 ulimit -c 命令可查看core文件的生成开关。若结果为0,则表示关闭了
2022-03-15 15:45:23
601
原创 代码之回调函数
回调函数就是一种把双向依赖改为单向依赖的好办法。函数指针void fun1(void){ printf("This is fun1\n");}int main(void){ void (*p)(void); //函数指针,(只能指向无参数、无返回值的函数) void (*p1)(int, int); //函数指针,(指向有两个int型参数、无返回值的函数) char (*p2)(int); //函数指针,(指向int型参数、返回char型的函数) void *(*p3)(i
2022-03-12 14:46:16
166
原创 多线程之互斥锁与条件变量
互斥锁操作函数初始化锁函数原型:int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrist attr);函数参数:① mutex:互斥锁② attr:互斥锁的属性(NULL为默认属性)。默认属性为快速互斥锁快速互斥锁:如果临界区已经被一个线程获取,其他线程或者该线程再次获取时,调用线程直接被挂起。递归互斥锁:已经获取临界区的线程可以多次获取,互斥量对象内部应有获取次数
2022-03-12 09:49:19
230
原创 多线程之信号量
信号量操作函数初始化信号量函数原型:int sem_init(sem_t *sem, int pshared, unsigned int value);函数参数:① sem:信号量。② pshared:信号量的使用范围。0表示同一进程内的线程。非0表示进程之间(不同进程)。③ value:用于指定信号量的初始值。函数返回值成功返回:0失败返回:-1原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切 换到
2022-03-11 19:28:28
276
原创 多线性之建立线程
Linux线程基础函数创建线程头文件#include <pthread.h>编译选项:-lpthread函数原型:int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *argv);函数参数:① thread:用于保存创建的线程ID。② attr:线程属性(默认属性NULL)。③ start_routine:函数指针,线程执
2022-03-11 16:14:55
73
原创 多路复用之select
头文件#include <sys/select.h>函数原型int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)函数作用:监控指定描述符集合中哪些描述符可不可以做相应的操作(读/写)或是否有异常。函数参数:① nfds:最大的描述符+1。给select指定关心描述符的最大范围。② readfds:是否有数据可读。③ writefds
2022-03-11 10:58:56
252
原创 I/O操作和多路复用select、poll、epoll机制的对比
四个I/O概念(阻塞、非阻塞、同步、异步)① 阻塞:调用函数。函数没有接收完数据或没有得到结果前,就不会返回。(调用结果返回之前,当前线程会被挂起,进入非可执行状态)例:Linux中默认所有的socket都是阻塞的。当用户进程调用了 read()/recvfrom() 等系统调用函数,首先会进入内核空间中。当这个网络I/O没有数据的时候,内核就要等待数据的到来。而在用户进程这边,整个进程会被阻塞,直到内核空间返回数据。当内核空间的数据准备好了,它就会将数据从内核空间中拷贝到用户空间,此时用户进程才解
2022-03-10 21:20:00
190
原创 多路复用之epoll
简介epoll 是Linux平台下的一种特有的多路复用IO实现方式使用说明:头文件#include <sys/epoll.h>创建epollint epoll_create(int size);函数作用:创建epoll句柄函数参数:① size:无作用,但是需要大于0.函数返回值:成功返回:非负文件描述符失败返回:-1,并且将errno设置为指示错误。向epoll添加文件句柄long epoll_ctl(int epfd, int op, int fd,struct
2022-03-10 20:40:39
305
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人