自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序员小L的博客

专注c,c++,数据结构,算法,操作系统,计算机原理,计算机网络,linux等的分享

  • 博客(19)
  • 收藏
  • 关注

原创 DBus学习

​ DBus(Desktop Bus)是一种跨进程通信机制,提供了不同进程之间进行通信的能力。它的设计旨在提供一种简单、高效、安全的通信方式,使得增加新的软件组件变得更加容易,并且能够轻松地维护现有的组件。DBus通信机制被广泛应用于Linux操作系统和桌面环境中,如GNOME、KDE等桌面环境。DBus还提供了一些重要的通信功能,这些功能在一些Linux发行版、应用程序等中非常常见,例如,开机提示、系统监控、命名服务等。

2023-03-10 11:18:19 2389 1

原创 使用vscode编写C程序

use-vscode-writen-c1.编写源码文件:#include <stdio.h>#include "add/add.h"#include "sub/sub.h"int main(){ int a = 5; int b=2; int sum = add(a,b); int su = sub(a,b); printf("sum:%d\nsub:%d\n",sum,su); return 0;}2.选择

2021-03-27 13:03:20 714

原创 cmake 使用教程

TutorialThe CMake tutorial provides a step-by-step guide that covers common build system issues that CMake helps address. Seeing how various topics all work together in an example project can be very helpful. The tutorial documentation and source code fo

2021-03-27 12:52:01 329

原创 Leetcode算法-1- 两数之和

两数之和:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]一般人第一反应就是用暴力破解,第一个循环控制每次取的第一个数,第二次循环控制第二个数,这样的时间复杂度为O(n^2)。我们使用一个

2020-09-11 09:08:56 139

原创 linux线程同步-读写锁-附可运行源码

在linux同步-互斥锁和linux同步-条件变量说明了几种线程同步的方式读写锁是一个可以分写状态和读状态的锁,可以分别加上写状态或读状态的锁。在读模式的锁下,所有试图以读模式获得它进行加锁的线程都可以获得锁,所有希望以写模式获得它的都会被阻塞。在写模式下,读写锁都被阻塞。读写锁又成共享互斥锁。简单的说,读模式的加锁下,所有进程都可以获得读锁,但都不能获得写锁。在写模式下,读写锁就变成了互斥锁,只有一个线程可以获得锁。简单来说,写独占、读共享读写锁非常适合于对数据结构读的次数远大于写的情况如下程

2020-09-04 15:37:32 145

原创 linux线程同步-条件变量-附可运行源码

条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。条件的检测是在互斥锁的保护下进行的。如果一个条件为假,一个线程自动阻塞,并释放等待状态改变的互斥锁。如果另一个线程改变了条件,它发信号给关联的条件变量,唤醒一个或多个等待它的线程,

2020-09-04 13:53:40 121

原创 linux线程同步-互斥锁-附可运行源码

线程同步,即为多个线程在操作同一个公共数据区域时,能保持数据的一致性,看下面代码:#include <stdio.h>#include <unistd.h>#include <pthread.h>int num = 100;void*mythread(void* p){ srand(time(NULL)); while(1) { num = num + 1;

2020-09-04 13:37:54 214

原创 一个可视化排序算法的网站

推荐一个可视化的排序算法的网站:[Sorting Algorithms Animations](https://www.toptal.com/developers/sorting-algorithms)他将常见的几种排序算法,如,插入排序,选择排序,冒泡排序,希尔排序,快速排序等制作成一个可视化的排序过程,非常直观,对了解排序规则大有裨益。其中:列: 显示了8中不同的算法行: 显示不同的数据样本,第一行Random(随机样本数据),第二行Nearly Sort(接近排好序的数据),第三行Reve

2020-08-15 21:24:23 3291

原创 一文学会栈的原理,有代码实现(源代码可运行)

ff

2020-08-13 12:07:48 192

原创 一文看懂TCP状态转换图,详细梳理每个状态转换

TCP连接的建立和终止可用状态转换图来说明,如下图,这些状态可以用netstat显示,它他是一个在调试客户服务器应用时很有用的工具。在一文真正了解TCP三次握手和四次挥手-wireshark抓包分析中详解讲到了TCP三次握手和四次挥手全过程,并且用wireshark抓包详细分析了发送包的数据。TCP为一个连接定义了11种状态,并且TCP规则规定如何基于当前状态及在线状态下所接受的包成为一个状态转换到另一个状态。举例来说,当某个应用进程在CLOSED状态之下主动打开时,TCP将发送一个SYN,且新的状态

2020-08-12 17:24:28 1880

原创 一文真正了解TCP三次握手和四次挥手-wireshark抓包分析

我们TCP/IP指的的TCP/IP协议族,现代网络通讯都是基于这个协议族简历起来的。UDPUDP(用户数据包协议 User Datagram Protocol),UDP是一种无连接协议,UDP客户端与服务器不必存在长期的关系,例如一个UDP客户端创建一个套接字并发送一个数据报给一个服务器,然后立即用同一个套接字发送另一个数据报给另外一个服务器。同样,一个UDP服务器可以用同一个UDP套接字从若干个不同的客户端一连串接受多个数据报。UPD不是可靠的,不能保证最终到达他们的目的地,不保证各个数据的先后顺序

2020-08-11 17:23:14 669

原创 一文读懂单链表-包含完整源代码-重磅推荐

单链表的结构线性表的存储有两种,一种是用数组实现,一种就是用链表方式实现,链式存储是最常见的存储方式之一,链表分为单链表,双链表,循环链表等。链表节点分散在内存的不同的地方,用指针连接起来,在内存的指向可能是这样的:单链表包含两个域,一个信息域和一个指针域,信息域包含具体的数据,指针域指向下一个节点,节点定义如下://定义节点结构体typedef struct LNode{ ElemType data; struct LNode * next;}LNode,*LinkList

2020-08-11 12:06:01 501

原创 C语言-数组指针,指针数组与数组名的指针操作

关于指针这一节,让不少人又爱又恨,爱其对操作数据提供便利,恨其要是失去控制,要定位其原因要花很长时间指针指针,即为地址,就像是在某小区中,假如,某个人住在A区1306,那么A区1306就是这个人住得地址,当你访问这个地址时,就能找到这个人。同样的,下面的代码:int a= 10;int *p = &a;声明一个变量a,用p指向a,即p中存放了变量a的地址通过p就能操作a。同样的,既然p是一个地址,那么也可以有一个指针指向p,可以这样写int a= 10;int *p = &

2020-08-10 17:04:08 1072

原创 C语言-一维数组和二维数组,包括动态一维数组和二维数组声明和使用

数组是一种数据格式,能够存储多个同类型的值,一位数组可以用来实现线性表的顺序存储,哈希表等,二维数组可以用来保存图的邻接矩阵等。一维数组的声明一维数组声明赢指出一下三点:存储在每个元素的值的类型,如,int,float,可以是复合类型数组名数组中的元素数,数组的元素数必须用值大于等于1的常量表达式定义;注意:数组定义中的类型不能是引用,即没有引用数组,这是因为引用是不能赋值的,而数组中的元素必须可以被赋值定义数组a的引用:int a[5] = {1, 2, 3, 4,5};in

2020-08-10 15:31:45 987

原创 你懂c语言的内存分布模型吗?一文详解内存分布模型

High Addresses ---> .----------------------. | Environment | |----------------------| | | Functions and variable are declared | STACK

2020-08-10 12:37:33 685

原创 C语言-一文读懂控制流

控制流,三个字应该分成两部分组成,控制和流,控制即为按照程序员的方向运行,流为数据的走向语句与程序块语句像int i = 0;i++;printf("%d", i);注意以分号; 结尾用一对花括号 "{"和“”}“”把一组声明与语句括在一起就构成了一个复合语句(也叫做程序块),复合语句在语法上等价于单条语句右括号由于结束程序块,不需要分号if-else语句if-else语句用户条件判定,语法如下:if(condition) do-thing-one;else: do-

2020-08-09 16:32:52 872

原创 C语言-类型,运算符与表达式

变量名C语言的变量名有些限制:必须以字母或下划线开头;变量命名区别大小写,A 和 a 是两个不同的变量;不能使用C语言关键字作为变量,如,if,else, int ;选择关键字建议见其名,只其意,这样对程序的可维护性提供便利下面的示例:int a; //合法的命名int A; //合法的命名,与a不是一个变量int _a; //不合法的命名int 023f; //不合法的命名,不能以数字开头int 看; //不合法的命名,要以字母和下划线命名数据类型和长度C语言提

2020-08-08 15:55:59 222

原创 hello,world的执行过程

一个程序从用户输入到程序输出结果,中间经过了十分复杂的过程,正式因为这样,一些厂商为了方便用户,将所有的步骤都集成到一个IDE(集成开发环境),将中间的环节都隐藏了,所以,你任务你写完程序,点击运行,马上输出有结果了,但是,对于一个程序员,这些环节还是要清楚的。#include <stdio.h>main(){ printf("hello, world\n");} 主要的流程有:当然,上述的hello.c和world.c是为了说明当有多个源文件的时候生成的过程,实际上

2020-08-07 22:23:07 1769

原创 用一段‘hello,world’开始你的程序生涯

用一段‘hello,world’开始你的程序生涯几乎所有的程序员接触到编程都是从那段著名的"hello,world!“程序开始的,不管你是用C,C++,java,python等语言,当你实际操作上手在屏幕上输出第一行文字时,好像自己已经打开了程序的大门了。多年以前,这个从农村来的孩子在大学的时候才接触到计算机,也是在大学的时候才买了第一台笔记本。市面上关于C语言的学习教程可谓多的不计其数,优秀的教程也有很多,说说我们我们接触到的,学习的教材一般都是谭浩强老师的"C语言程序设计”,国外的教程有:cprog

2020-08-07 17:36:38 324

空空如也

空空如也

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

TA关注的人

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