- 博客(24)
- 收藏
- 关注
原创 Linux c线程间的同步----互斥锁、条件变量、信号量
线程一个进程中的所有线程共享为进程分配的地址空间。所以进程地址空间中的代码段和数据段都是共享的。如果定义一个函数在各个线程中都可以调用,定义一个全部变量,在各个线程中都可以访问到。各线程共享资源 - 数据段和文本(代码)段 - 对全局变量的访问 - 文件描述符 - 每种信号的处理方式(SIG_IGN,SIG_DFL或自定义的信号处理函数) - 当前的工作目录 - 用户的id...
2018-08-20 19:13:10
485
转载 C语言实现简单的线程池【转】
转自https://blog.csdn.net/hubi0952/article/details/8045094线程池的基本原理在传统的服务器结构中,常用一个总的线程监听有没有新的客户端连接服务器。每当有一个新的客户端连接就开启一个新的线程处理这个客户端的信息,这个线程只服务于这个用户,当客户端和服务器关闭连接后服务器端就销毁这个线程。当服务器频繁的有客户端连接的时候就要频繁的开辟与销...
2018-08-19 22:20:04
1580
原创 c++学习六(静态成员和友员函数)
静态数据成员:在类里面声明为static静态数据成员,但是要在类外面定义和初始化静态数据成员。因为这个静态数据成员是属于类的,我们想要在所以的对象定义之前就初始化这个静态数据成员。静态函数:也是在类里面在函数名前面添加static,在静态函数中不能访问非静态变量。所以静态函数中只能访问静态数据成员。静态函数调用的方法可以是Person::getcount()或者per::getcount()(...
2018-08-12 21:05:25
300
原创 c++学习五(构造函数)
在原来的程序中,首先在类里面包含了成员属性并且包含了用来初始化成员属性的一些设置函数,然后在main函数中调用这些设置函数来对这些属性赋值。而且每设置一个属性就要调用一个函数,这样看起来很麻烦效率很低。因此引入了构造函数。所谓构造函数就是和类的名字相同的函数,它可以带有参数,也可以带参数,也可以带不同的参数(利用了函数的重载)。在类中写好了构造函数之后,在使用类定义对象的同时把要赋值给...
2018-08-12 14:42:39
291
原创 c++学习四(重载、指针和引用)
所谓重载就是:函数名相同,参数不同(包括类型、数量、顺序不同)当我们调用函数的时候编译器能够通过函数参数的数量或者类型或者顺序不同来选择要调用那个函数。但是不能通过返回值的不一样来重载函数。#include <iostream>using namespace std;int add(int a, int b){ cout<<"int + int"...
2018-08-11 21:38:48
313
原创 c++学习三(程序的结构)
一开始的时候是将函数定义放在类里面的。现在类里面只放函数的声明,在类的外面实现函数的定义。#include <stdio.h>class Person {private: char *name; int age; char *work;public: void setName(char *name); int setAge(int age); void...
2018-08-10 22:09:37
532
原创 c++学习二(访问控制、类和对象)
很基础的知识:利用c++语言写的源文件名的后缀是用cpp结尾的。然后在Linux下编译的时候是用g++编译的 如果类里面的属性或者函数没有显式声明为public或者private,那么类中的变量和函数的权限默认为private。就表明这个类中的这些函数和变量只能在类内部中使用。想让类外部的代码访问类内部的数据成员或函数方法的话要声明为public。要想访问类中private的变量必须在...
2018-08-10 20:23:17
160
原创 C++学习一(面向对象的引入)
/*写一个程序,输出张三、李四两个人的姓名、年龄*//*利用变量存储*/person1.c#include <stdio.h>int main(void){ char *zs_name = "zhangsan"; int zs_age = 18; char *ls_name = "lisi"; int ls_age = 16; ...
2018-08-10 19:39:16
266
原创 牛客网刷题笔记(字符串)
字符串面试题的特点:、广泛性(可以把字符串看做字符类型的数组)所以与数组的排序、查找和调整有关 、需要掌握的概念 (回文、子串(连续)、子序列(不连续)、前缀树(Trie树)、后缀树和后缀数组、匹配、字典序) 、需要掌握的操作(与数组有关的操作:增删改查、字符串替换、字符串旋转) 字符串题目的常见类型1.规则判断(判断是否符合整数规则、判断字符串是否符合浮点数规则、是否符合回文字符串规...
2018-08-02 15:17:57
647
原创 队列和栈(C语言)
栈和队列的基本性质栈是先进后出的结构(弹夹) 队列是先进先出的(排队) 栈和队列在实现结构上可以有数组和链表两种方式栈结构的基本操作:1、弹栈2、访问栈顶元素3、压栈操作4、返回当前栈中的元素个数 队列结构的基本操作:1、队列元素进队列是从队尾插入的2、队列元素出队列是从对头弹出的 (类似于日常排队) /*栈的结构定义(顺...
2018-07-30 14:10:01
2274
转载 C语言中realloc()函数解析
转自https://blog.csdn.net/hackerain/article/details/7954006 realloc(void *__ptr, size_t __size):更改已经配置的内存空间,即更改由malloc()函数分配的内存空间的大小。如果将分配的内存减少,realloc仅仅是改变索引的信息。如果是将分配的内存扩大,则有以下情况:1)如果当前内存段后...
2018-07-29 10:33:06
213
原创 基本的排序算法
一、冒泡排序算法(时间复杂度为O(n²))假设有N个数,一开始交换的范围是0~N-1,那个大那个就放在后面,依次交换过去,最后最大的数就放在了最后面。 接着把范围缩小到0~N-2,继续比较那个大那个就放在后面,依次交换过去,倒数第二大的数就放在倒数第二了 直到把范围缩小到只有一个数的时候整个数组就有序了int *bublesort(int *arry, int n){ if(...
2018-07-28 21:51:25
123
原创 嵌入式笔记:进程间的通信
为什么需要进程间通信(IPC)?1、数据传输 一个进程需要将它的数据发送给另一个进程。(进程要合作)2、资源共享 多个进程之间共享同样的资源。(要协作)3、通知事件 一个进程需要向另外一个或一组进程发送消息,通知它们发生了某种事件(进程同步)4、进程控制 Linux使用的进程间通信方式包括:1、管道(pipe)和有名管道(FIFO)2、...
2018-07-28 19:55:38
1506
转载 嵌入式笔试题
1. C语言中,修饰符volatile含义是什么?其应用场合有哪些? volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。 2. 请问TCP/IP协议分为哪几层...
2018-07-28 15:43:11
7297
1
转载 网络通信之字节序转换原理
转自https://www.cnblogs.com/fuchongjundream/p/3914770.html一、在进行网络通信时是否需要进行字节序转换? 相同字节序的平台在进行网络通信时可以不进行字节序转换,但是跨平台进行网络数据通信时必须进行字节序转换。 原因如下:网络协议规定接收到得第一个字节是高字节,存放到低地址,所以发送时会首先去低地址取数据的高字节。小端...
2018-07-28 11:49:26
2266
1
转载 Linux库函数与系统调用的区别
转自https://www.cnblogs.com/liwei0526vip/p/8998751.html一、系统调用系统调用可以理解为操作系统为用户提供的一系列操作接口(API),这些接口提供了对系统硬件设备功能的操作。例如:利用库函数printf()在屏幕上打印信息,程序中调用了printf()函数,而库函数printf()调用了系统调用write()函数,实现了终端信息打印功能。...
2018-07-28 10:30:01
295
转载 Linux内核的五大子模块
转自https://blog.csdn.net/hello_world6/article/details/52675231一个完整的Linux内核一般由五部份组成,分别是:内存管理,进程管理,进程间通信,文件系统,网络接口。1、内管管理内存管理主要完成是如何合理有效地管理整个系统的物理内存,同时快速响应内核各个子系统对内存分配的请求。Linux内存管理支持虚拟内存,而多余出的这部分内存...
2018-07-27 22:31:09
5540
原创 牛客网刷题笔记【1】
1、判断两个字符串是否互为旋转词例如“1234”旋转词有“1234”, “2341”, “3412”, “4123”思路:1、函数的接口设计 函数参数:两个字符串的地址 函数的返回值(int) 1:表示是旋转词 0:表示非旋转词2、先判断两个字符串的长度是否相等,如果不相等则返回false(0),还有字符指针传进来的有效性检测。3、如果两个字...
2018-07-27 22:12:30
206
转载 嵌入式C笔试题[转]
1、整数求反如123456求反之后变654321思路:定义两个变量,一个变量保存原来的数,另外一个保存取反之后的数。然后利用对10求余的方法将要取反的数的最低位首先取出来,然后利用除法(除以10)将最低位去掉。利用num>0不断的循环一位一位的取出来即可。关键:***对10求余是取出最低位*** ***除以10是去除最低位***int main(v...
2018-07-26 21:07:27
3085
转载 可重入、TCP、UDP
一、可重入和不可重入函数可重入函数主要运行在多任务环境中,一个可重入函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任意期间中断这个函数,跳转去执行另外一段代码。当返回被中断处继续执行这个函数时不会发生错误(就是执行的环境没有改变)。不可重入函数由于使用了一些系统资源(全局变量区,中断向量表等),所以如果它被中断然后中断返回继续执行的话,可能它的运行环境就会发生了改变。所以...
2018-07-25 23:12:04
166
转载 C语言的一些关键字的作用
一、Static关键字的作用1、如果用来定义局部变量则改变局部变量的存储区域和声明周期static定义的局部变量,如果是未初始化的局部变量则放在数据段(.data)上的未初始化可读写的段上(bss段)如果是初始化的static局部变量则放在数据段(.data)初始化的可读写的区域上。当函数退出的时候static定义的局部变量不会释放(生命周期是整个程序运行期间都会存在),并且无论调...
2018-07-25 22:09:29
1825
原创 单链表的创建和删除
单链表的整表创建step1:确定函数原型:函数返回值:void 函数参数:头指针的地址ListNode **、创建链表节点的个数nstep2:先判断要不要头结点,如果要头结点先创建一个头节点并让头指针指向头节点step3:利用传进来链表节点的个数n做循环控制的条件,循环创建链表并插入 链表节点的结构...
2018-07-25 20:45:53
749
原创 混合运算时数据类型的转换。
表达式中的类型转换分为:隐含转换和强制转换。 在算术运算和关系运算中如果参与运算的操作数类型不一样,则系统会对其进行类型转换,这是隐含转换,转换的原则就是将低类型的数据转换为高类型数据。各类型从低到高依次为char,short,int,unsigned int,long,unsigned long,float,double。类型越高范围越大,精度也越高。隐含转换是安全的,...
2018-06-15 21:55:59
3491
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人