自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ioctl 获取相关地址及开启和关闭网卡

1,结构体struct ifreq{#define IFHWADDRLEN 6 union { char ifrn_name[IFNAMSIZ]; } ifr_ifrn; union { struct sockaddr ifru_addr; struct sockaddr ifru_dstaddr; struct sockaddr ifru_broadaddr; struct sockaddr ifru_netmask; struct sockaddr

2020-05-25 20:56:52 848

原创 cjson学习

一,cJSON结构体typedef struct cJSON { struct cJSON *next,*prev; /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */ struct cJSON *child; ...

2019-11-02 16:50:56 225

原创 shell变量

1,定义变量时变量名和等号 之间不能有空格,且有以下规则:命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。 中间不能有空格,可以使用下划线(_)。 不能使用标点符号。 不能使用bash里的关键字(可用help命令查看保留关键字)。2,使用变量在变量前面加$或${},花括号可加可不加。加括号是为了识别变量的边界for skill in Ada Coffe Actio...

2019-10-23 11:46:07 159

原创 c语言中的测试函数(宏)

下面的函数都是c语言的测试函数但实则为宏,头文件为#include <ctype.h>int isalnum(int c);下面的形式都是这样有一个整型参数和一个整型返回值,字符符合函数就返回1否则返回0。//isalnum 测试字符是字母或者是数字 是返回1 否则返回0 //isalpha 测试字符是字母 是返回1 否则0//isascii 测试字符是否是ASCII字...

2019-10-21 20:36:23 838

原创 消息队列

一,消息队列1,消息队列与管道和fifo不同,前者随内核持续,后者随进程持续2,消息队列写消息时不需要某个进程等待该消息的到达3,posix和system v 区别Posix 消息队列总是返回最高优先级的消息,而system v的读可以返回任意指定的优先级消息。往一个空队列放置一个消息时,posix消息队列允许产生一个信号或者线程,system v不提供4,每个消息...

2019-10-21 09:57:09 469

原创 读写锁例子

#include <stdio.h>#include <unistd.h>#include <pthread.h>int counter;pthread_rwlock_t rwlock;void *th_write(void *arg);void *th_read(void *arg);int main(int argc, char *...

2019-10-20 13:12:47 475

原创 互斥锁例子

/*生产者执行完,消费者才执行。*/#include <stdio.h>#include <stdlib.h>#include <pthread.h>#define MAXNITEMS 1000000#define MAXNTHREADS 5int nitems;struct{ pthread_mutex_t mutex;//互斥锁...

2019-10-20 13:11:32 404

原创 条件变量例子

#include <stdio.h>#include <pthread.h>#define MAXNITEMS 1000000int nitems;int buff [MAXNITEMS];struct{ pthread_mutex_t mutex; int nput; int nval;}put = {PTHREAD_MUTEX_INITIALIZ...

2019-10-20 12:04:45 196

原创 硬盘知识

磁盘:一个硬盘一般会有多个盘片,每个盘片都有两面每个盘面都有一个读写磁头。一般盘片在5片以内,盘片的序号从开始往上数,如最下的一个盘片有两个盘面序号为0,1磁头:数据读写在这发生,一个盘片的两个盘面都有磁头。磁道:如图所示,盘面中的同心圆为一个磁道。扇区:磁道上的一个弧段,他是硬盘的最小的组成单位也是硬盘的最小读写单元,通常512字节。...

2019-10-19 22:34:31 652

原创 用宏定义新的打印函数

#include <stdio.h>#define my_printf(fmt,...) printf(fmt,##__VA_ARGS__)#define TRACE_CDH(fmt,...)\ printf("%s-%s--->>%s:%s(%d):"fmt, __DATE__,__TIME__,__FILE__,__FUNCTION_...

2019-10-19 22:34:07 611

转载 套接字超时方法

https://blog.csdn.net/lr982330245/article/details/251160371.调用alarm当一个低速调用阻塞期间捕捉到一个信号, 则该系统调用就被中断不再继续执行。 该系统调用返回出错,起errono设置为EINTR。 因为发生信号, 进程捕捉到它, 这将是一个很好的机会来唤醒阻塞的系统调用。但有一个问题就是如果该系统调为read(), 正在等待...

2019-10-19 22:30:05 2909

原创 关于时间的几个函数

直接看个例子:#include <stdio.h>#include <time.h>int main(int argc, char **argv){ struct tm *ptr; time_t tt; tt = time(NULL);//1970年1月1日0时到现在的秒数 //gmtime(&tt);//把日历时间转换为格林威治时间 p...

2019-10-17 21:49:47 480

原创 sprintf,sscanf函数详解

一,sprintf函数原型:int sprintf(char *str, const char *format, ...)作用是格式化字符串,具体功能如下所示:(1)将数字为变量转换字符串。(2)得到整型变量的16进制和8进制字符串。(3)连接多个字符串。例子:int main(int argc, char **argv){ char str[256] = {0...

2019-10-15 23:02:48 266

原创 strtok,strstr,strchr,strrchr函数详解

1,strtok函数 字符串切割函数函数原型:char *strtok(char *s, char *delim);函数功能:把s字符串按照delim分隔符进行分割。a,第一次调用该函数需要指定第一个参数 以后调用则用NULL代替b,strtok函数实质:strtok在s中找到delim分隔符后用'/0'代替此分隔符,返回值的指向分隔符前面的子串。c,第一个参数需要用数组形式 ...

2019-10-15 15:42:40 774

原创 Linux实现回收站

1,输入以下命令vim~/.bashrc2,在打开的./bashrc中添加以下内容mkdir-p~/.trashaliasrm=trashaliasr=trashaliasrl='ls~/.trash/'aliasur=undelfile undelfile(){mv-i~/.trash/$@./} trash(){...

2019-10-08 22:05:48 175

转载 VMware如何实现和主机共享网络上网

VMware虚拟机的三种联网方法及原理一、Brigde——桥接 :默认使用VMnet01、原理:Bridge 桥"就是一个主机,这个机器拥有两块网卡,分别处于两个局域网中,同时在"桥"上,运行着程序,让局域网A中的所有数据包原封不动的流入B,反之亦然。这样,局域网A和B就无缝的在链路层连接起来了,在桥接时,VMWare网卡和物理网卡应该处于同一IP网段 当然要保证两个局域网没有冲...

2019-10-08 19:16:15 6414

转载 无名信号量

信号量概述信号量广泛用于进程或线程间的同步和互斥,信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。编程时可根据操作信号量值的结果判断是否对公共资源具有访问的权限,当信号量值大于 0 时,则可以访问,否则将阻塞。PV原语是对信号量的操作,一次 P 操作使信号量减1,一次 V 操作使信号量加1。信号量主要用于进程或线程间的同步和互斥这两种典型情况。信号量用于互斥:...

2019-10-08 17:19:00 278

转载 c语言中小数在内存中的存储

转至:https://blog.csdn.net/tqs_1220/article/details/73550899首先看float和double在内存中是怎么存储的?float:符号位(1位)+指数位(8位)+尾数位(23位)范围:-2^-128 ~2^127  (-3.40E-38~3.40E+38)double:符号位(1位)+指数位(11位)+尾数尾(52位)范围:-2...

2018-09-06 15:49:39 3417

原创 fork和printf问题

一,fork函数#include &lt;unistd.h&gt;pid_t fork(void)返回值:-1,失败。子进程返回0,父进程返回子进程的进程ID。父子进程的0~3G用户地址空间,差不多一样。比如数据段,代码段,栈,堆,环境变量、用户ID、宿主目录、进程工作目录、信号处理方式,缓冲区等。父子进程不一样的是:进程ID,父进程ID,fork返回值,进程运行时间,未决信号集,...

2018-09-04 16:42:57 1042

原创 String类简单实现

my_string 包括构造函数,拷贝构造函数,析构函数,operator=,operator&lt;&lt;,operator ==,operator!=。#include &lt;iostream&gt;#include &lt;cstring&gt;using namespace std;class my_string{public: my_string(); my_s...

2018-09-01 14:20:47 186

原创 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路:借助辅助栈,从源序列中压入一个元素时,top与目标序列比较,如果相等,目标序列下标+...

2018-08-31 14:42:12 2039

原创 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数

题目:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))思路:用一个辅助栈,入栈时,元素和辅助栈中较小的元素 压入辅助栈中。辅助栈和栈的元素的个数要一样。辅助栈为空时,要入栈。class Solution {public: void push(int value) { m_data.push(value);...

2018-08-31 14:25:57 212

原创 用两个栈来实现一个队列,完成队列的Push和Pop操作

题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路:先入栈,后出栈,再入第二个栈 ,再从第二个栈中去元素 然后popclass Solution{public: void push(int node) { stack1.push(node); } int pop() { if...

2018-08-31 14:06:11 336

原创 翻转字符串

题目:翻转字符串:“student. a am I”。句子应该是“I am a student.”思路:先把句子整体翻转,然后把每一个单词翻转。class Solution {public: string ReverseSentence(string str) { int length=str.size(); int i=0,j=0; ...

2018-08-31 13:59:35 110

原创 左旋字符串

题目:左旋字符串:例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”思路:先分为两个部分,两个部分分别翻转,然后整体翻转。注意要用引用class Solution {public: string LeftRotateString(string str, int n) { int length=str.size()...

2018-08-31 13:54:15 121

原创 字符串中查找第一个只出现一次的字符

题目:在一个字符串(0&lt;=字符串长度&lt;=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).思路:利用hash表存储每个字符的次数,然后遍历字符串,返回第一个字符为1次的字符。hash数组的内容就是每个字符的次数。这个是特殊的hash表。class Solution {public: int Fir...

2018-08-31 13:51:16 216

原创 将一个字符串中的每个空格替换

题目:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路:先遍历字符串,找出空格数。目的字符串的长度比源字符串长度增加了 空格数*2;从后往前替换 。class Solution {public: void replaceSpace(char *str,int le...

2018-08-31 13:44:13 328

原创 请实现一个函数,用来判断一颗二叉树是不是对称的

题目:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路:前序遍历和对称前序遍历(先遍历根节点 然后遍历右子树,然后左子树),而且需要考虑null节点。class Solution {public: bool isSymmetrical(TreeNode* pRoot) { return...

2018-08-30 15:13:18 389

原创 输入一棵二叉树,判断该二叉树是否是平衡二叉树

题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树思路:平衡二叉树:某节点的左右子树深度差绝对值不超过1,可以先求左右子树的深度,判断这个节点是不是平衡的。class Solution {public: bool IsBalanced_Solution(TreeNode* pRoot) { if(pRoot==NULL) return...

2018-08-30 15:07:31 1999

原创 求二叉树深度

输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路:从根节点开始,如果左子树的深度大于右子树的深度,整个深度就是左子树深度加1,相反就是右子树的深度加1class Solution {public: int TreeDepth(TreeNode* pRoot) { if(p...

2018-08-30 14:11:18 1608

原创 从上往下打印出二叉树的每个节点,同层节点从左至右打印

题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印思路:借助一个队列,先把根节点入队,每打印一个节点的值时,也就是打印队列头的节点时,都会把它的的左右孩子入队,并且把该节点出队。直到队列为空。class Solution {public: vector&lt;int&gt; PrintFromTopToBottom(TreeNode* root) { ...

2018-08-30 13:32:12 799

原创 求二叉树的镜像

题目:操作给定的二叉树,将其变换为源二叉树的镜像。思路:从根节点开始,交换左右节点,然后前序遍历。class Solution {public: void Mirror(TreeNode *pRoot) { if(pRoot==NULL) return ; if(pRoot-&gt;left==NULL&amp;&am...

2018-08-30 13:22:27 106

原创 一些排序总结

#include &lt;iostream&gt;#include &lt;cstdio&gt;#include &lt;cstdlib&gt;using namespace std;/*种类 时间复杂度 空间复杂度 稳定性 是否与初始序列有关冒泡排序 O(n^2) O(1) 稳定 有 插入排序 O(n^2) O(1) 稳定 有 ...

2018-08-28 20:37:10 166

原创 顺序点问题

一,什么是顺序点顺序点是指在程序执行过程中变量值改变最晚的时刻。在程序到达顺序点时,之前所做的一些操作都必须反映到后续访问中。 二,C语言中的顺序点每个完整的表达式结束后 &amp;&amp;,||,?:,以及逗号运算符每个对象计算以后。 函数调用中对所有实际参数的求值完成之后(进入函数体之前)(这里和顺序点没有关系,而是和调用约定有关)三,理解顺序点首先明确一点,后置+...

2018-08-27 14:09:46 498

原创 C语言中的可变参数

一,两种形式的可变参数第一种的形式的头文件是&lt;varargs.h&gt;第二种的形式的头文件是&lt;stdarg.h&gt;,是第一种的扩展。区别:varargs.h比stdarg.h更有移植性,能够运行的系统平台也多一些,且更早。 如果要编写一个遵循ANSIC标准的程序,就必须使用stdarg.h。二,varargs.h&lt;varargs.h&gt;中有一些宏...

2018-08-26 19:53:26 143

原创 滑动窗口和拥塞窗口

一,滑动窗口窗口:发送者发送的连续字节序列的集合滑动:发送的窗口可以随发送过程而变化。为什么需要窗口:不必每一个段进行一次确认应答,而是以一个窗口的大小进行确认。减少往返时间,提高速度。(TCP在发送时其实是以字节为单位的)窗口控制和重发机制:1,数据已到达对端,但确认ack丢失,这种情况是不需要重发的。如果没有使用窗口机制则需要重发。某一个ack丢失,在窗口机制下可以通过下一...

2018-08-23 14:57:57 6882

原创 套接字的阻塞与非阻塞

套接字的默认状态是阻塞。阻塞的套接字调用可分为四种(1),输入操作,包括read,readv,recv,recvfrom,recvmsg。阻塞:TCP:如果接收缓冲区没有数据读,则阻塞,直到数据到达。UDP:如果接收缓冲区没有数据读,则阻塞,直到UDP数据报到达。非阻塞:如果输入操作不能被满足(对于TCP套接字即至少有一个字节的数据可读,对于UDP套接字即有一个完整的数据报可读...

2018-08-22 19:54:11 3311

原创 IO复用的三种模型

一,IO模型unix5种IO模型:阻塞式I/O:所有套接字默认 非阻塞I/O I/O复用(select,poll,epoll) 信号驱动式(SIGIO):内核在描述符就绪时发送SIGIO通知进程 异步I/O(POSIX的aio_系列函数):不会阻塞。内核完成后整个操作,通知进程。同步I/O:真正的IO操作进程会阻塞,直到I/O程序结束异步I/O:不导致请求进程阻塞对于一个...

2018-08-22 19:43:36 4185

原创 管道和共享内存

一,无名管道特点:其本质是一个伪文件(实为内核缓冲区) 由两个文件描述符引用,一个表示读端(fd[0]),一个表示写端(fd[1])。 规定数据从管道的写端流入管道,从读端流出。原理:管道实为内核使用环形队列机制,借助内核缓冲区(4k)实现局限性:① 数据自己读不能自己写。 ② 数据一旦被读走,便不在管道中存在,不可反复读取。 ③ 由于管道采用半双工通信方式。因此,数据...

2018-08-22 12:48:54 2432

原创 多进程

一,进程相关的概念1,程序与进程程序:是编译好的二进制文件,在磁盘上。不占用系统资源(cpu、内存、打开的文件、设备、锁....)进程:进程是活跃的程序,占用系统资源。2,并发在操作系统中,一个时间段中有多个进程都处于已启动运行到运行完毕之间的状态。但同一时刻只能运行一个进程。在这个时间段中,cpu给每一个进程,分配一个时间轮片。3,进程地址空间与MMUCPU:预取器,...

2018-08-21 19:21:54 990

空空如也

空空如也

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

TA关注的人

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